Java 用hibernate(JPA)映射超类和子类

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 我建议如何在构建

我正在尝试使用HibernateJPA将对象持久化到数据库中

这些对象已经有了一个类型层次结构,我正试图让它与hibernate一起工作

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很有用,我现在一直在使用它来实现我的目标