【问题标题】:How to Avoid Annotations in POJOs如何避免 POJO 中的注释
【发布时间】:2014-07-07 15:29:38
【问题描述】:

假设我有以下 POJO 类

public class Example {

private String name; 

private int id;

private Object o;
// more fields
// getter/Setter

现在假设我想使用 JPA 持久化我的实体,我将使用以下示例 POJO 类:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private int id;

@OneToMany(mappedBy = "directive")
private String name;

在我看来,这很糟糕,因为如果我想使用例如Spring Data MongoDB 的注释将是无用的/错误的。

我能想到避免这种情况的唯一原因是定义一个接口或一个抽象类,例如 Storable,它定义了 getter/setter 方法。

但是我违反了 POJO 的定义(可以说它一开始就不是 Pojo)。

是否有定义模型类的最佳实践?

【问题讨论】:

  • 我确定有一些。最佳实践,就是这样。您是否正在寻求一种编写任何库都可以普遍持久化的 Java 类的方法?我不确定这是一个现实的期望。
  • 是的,这正是我想到的。
  • @haßehueck 你有没有关于这个问题的新发现?你选择了哪种方法?模型类中的 xml、dto 或 JPA 注释?

标签: java spring hibernate mongodb jpa


【解决方案1】:

使用 JPA 时,您可以保持类不变,并将所有配置保存在 XML 文件中。许多人更喜欢注解,但如果需要更改持久性实现,则应考虑使用外部配置。

我不确定除了 JPA 之外的其他框架/规范,但 XML 配置在 java 中大有帮助。我敢肯定,许多框架都提供了这样的可能性。

还有一种称为 DTO(数据传输对象)的模式可用于将持久性关注点与业务关注点分离。

要点是:您仅将带注释的、以 DB 为中心的类用于 DB 连接。您的主应用程序仅使用面向业务的类并且与持久性无关。数据可以来自数据库或平面文件,只要您可以将其转换为您的业务对象,一切都很好。

编辑:DTO 听起来需要做很多工作,但您可以通过分离关注点来获得清晰性和可测试性。 hexagonal architecture 和 clean architecture 强调这种方法。

【讨论】:

  • 我宁愿避免使用 XML,但是这似乎是一种非常通用的方法。
  • 两个灵魂,唉,我的胸膛里住着 :) 我也更喜欢避免使用 XML 配置,但是你已经知道你的应用程序会发生什么变化,你可以通过提取变化吸引子。
猜你喜欢
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2013-10-14
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多