Java 用hibernate(JPA)映射超类和子类
我正在尝试使用HibernateJPA将对象持久化到数据库中 这些对象已经有了一个类型层次结构,我正试图让它与hibernate一起工作Java 用hibernate(JPA)映射超类和子类,java,hibernate,jpa,jpa-2.0,Java,Hibernate,Jpa,Jpa 2.0,我正在尝试使用HibernateJPA将对象持久化到数据库中 这些对象已经有了一个类型层次结构,我正试图让它与hibernate一起工作 CatalogPackage对象具有所有重要属性和所有getter。 CatalogPackageImpl(扩展CatalogPackage)对象没有属性,但大多数设置器都没有属性 这两个类都是非抽象的 我们希望代码引用CatalogPackage对象。但是在初始化hibernate时,它会抱怨CatalogPackage类中缺少setter 我建议如何在构建
CatalogPackage
对象具有所有重要属性和所有getter。
CatalogPackageImpl
(扩展CatalogPackage
)对象没有属性,但大多数设置器都没有属性
这两个类都是非抽象的
我们希望代码引用CatalogPackage
对象。但是在初始化hibernate时,它会抱怨CatalogPackage
类中缺少setter
我建议如何在构建对象时休眠它使用子类
我不想将所有setter移到超类,也不想使用
catalogpackeimpl
作为实体。尽管我看不出在CatalogPackage
中定义setter方法有什么问题,因为它们可以标记为private
,以避免从外部世界使用它们。
由于您没有粘贴实体配置,并且您说Hibernate正在抱怨setter方法,我可以断定您正在使用getter来描述实体映射,对吗
在这种情况下,Hibernate仍然会抱怨,因为它假设映射到数据库的任何操作都应该在两个方向上进行,如果它可以从数据存储中读取数据,那么应该允许它在数据存储中写入
因此,您有以下任一解决方案:
- 添加setters修改器
- 将映射从getter方法移动到字段,并将访问类型设置为实体顶部的字段:
@Access(AccessType.Field) class CatalogPackage { ... }
@Access(AccessType.Field)
?然而,我不认为你描述的设计是合适的——为什么你坚持把接受者和接受者分开?这很可能会导致Hibernate出现问题…请通过发布您的entities@Blekit你说得对,它确实在路上造成了问题……谢谢!AccessType.FIELD很有用,我现在一直在使用它来实现我的目标