假设我有以下 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 注释将无用/错误。
我能想到避免这种情况的唯一原因是定义一个接口(interface)或抽象类,例如定义 getter/setter 方法的 Storable。
但后来我违反了 POJO 的定义(可以说它一开始就不是 Pojo)。
是否有定义模型类的最佳实践?
最佳答案
当使用 JPA 时,您可以保持类不变,并将所有配置都放在 XML 文件中。许多人更喜欢注释,但如果需要更改持久性实现,则应考虑使用外部配置。
我不确定除了 JPA 之外的其他框架/规范,但 XML 配置在 Java 中有很长的路要走。我敢肯定,许多框架都提供了这种可能性。
还有一种称为 DTO(数据传输对象)的模式,可用于将持久性问题与业务问题分离。
要点是:您仅将带注释的、以数据库为中心的类用于您的数据库连接。您的主应用程序仅使用面向业务的类并且与持久性无关。数据可以来自数据库或平面文件,只要您可以将其转换为业务对象,一切都很好。
编辑:DTO 听起来像是很多工作,但您可以通过分离关注点获得清晰度和可测试性。 hexagonal architecture和 clean architecture强调这种方法。
关于java - 如何避免 POJO 中的注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24614289/