我看到了很多有关此问题的文章,但是发现的许多答案是使用@MappedSuperclass注释,在我看来,该注释破坏了我所做的模块化设计。

假设您有两个类,一个是Entity类,另一个在另一个不是Entity类的模块中:

模块M:

@Entity
public class A {
 //Properties
}


模块M':

public class SuperA {
   String name;
   String age;

   //getters and setters
}


我想重用要在A实体中映射的SuperA的属性。但是我不想让模块M既不是关于持久性知识的SuperA类(例如,避免使用@MappedSuperclass注释)。

我应该怎么算?我以为A类使用Adapter模式,但是我不确定...

最佳答案

我可以看到两个选项:

1)您必须添加基于XML的Hibernate配置作为整个Persistence Unit的一部分。注意避免在模块M中进行任何其他更改:

<component name = "SuperA">
        // properties
</component>


在这里,您将SuperA类注册为可嵌入的。

2)在第一个模块中扩展SuperA并将该类标记为@Embeddable。然后,在每个需要它的实体中,只需创建一个字段并用@Embedded对其进行注释。

09-28 13:10