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

时间:2014-04-14 13:11:16

标签: java hibernate jpa jpa-2.0

我正在尝试使用hibernate JPA将对象保存在数据库中。

对象已经有了一个类型层次结构,我正在尝试使用hibernate。

CatalogPackage对象具有所有重要属性和所有getter。 CatalogPackageImplextends CatalogPackage)对象没有属性,但大部分是setter。

这两个类都是非抽象的。

我们希望代码引用CatalogPackage个对象。但是在初始化hibernate时,它会抱怨CatalogPackage类中缺少setter。

我如何建议在构建对象时使用子类来休眠?

我不想将所有setter移动到超类,我不想使用CatalogPackageImpl作为实体。

1 个答案:

答案 0 :(得分:0)

即使我在CatalogPackage中定义setter方法时看不到问题,因为可以将它们标记为private以避免在外部世界中使用它们。 既然你没有粘贴你的实体配置,并且你说Hibernate抱怨setter方法我可以断定你使用你的getter来描述你的实体映射,对吗?

在这种情况下,Hibernate总是会抱怨,因为它假设任何映射到数据库的内容应该在两个方向上完成,如果它可以从数据存储中读取,那么应该允许它在那里写入

所以你有以下任何一种解决方案:

  • 添加setter修饰符。
  • 将映射从getter方法移动到字段,并将访问类型设置为实体顶部的字段:

    @Access(AccessType.Field)
    class CatalogPackage {
      ...
    }