我看到了很多有关此问题的文章,但是发现的许多答案是使用@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
对其进行注释。