java - 如何避免 POJO 中的注解

标签 java spring hibernate mongodb jpa

假设我有以下 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 architectureclean architecture强调这种方法。

关于java - 如何避免 POJO 中的注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24614289/

相关文章:

java - 依赖项应该注入(inject)一次还是每个对象中

spring - spring mvc3 中的请求映射 url 模式

java - Spring:为什么我在使用注解时需要applicationContext.xml?

java - 这是一个 N+1 问题吗?我该如何解决它?

java - Spring批量导入期间枚举到字符串的转换失败

安装 Websphere Application Server 时未找到 Java

java - 多个 ExecutorService 在 main 之后完成

java - 有没有办法在 Kotlin 中隐藏 Java 方法?

java - Hibernate继承,多态保存

java - 如何映射 Map<String,Double>