【问题标题】:mapping superclasses and subclasses with hibernate (JPA)使用休眠 (JPA) 映射超类和子类
【发布时间】:2014-04-14 13:11:16
【问题描述】:

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

对象已经具有类型层次结构,我正在尝试使其与 hibernate 一起使用。

CatalogPackage 对象具有所有重要属性和所有 getter。 CatalogPackageImpl (extends CatalogPackage) 对象没有属性,但大多数设置器。

这两个类都是非抽象的。

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

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

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

【问题讨论】:

  • 你试过在超类上使用@Access(AccessType.Field) 吗?但是,我认为您所描述的设计不合适-您为什么坚持将吸气剂与二传手分开?这很可能会导致 Hibernate 出现问题......
  • 请通过发布您的实体更新您的问题
  • @Blekit 你是对的,它确实会导致问题...stackoverflow.com/questions/23116287

标签: java hibernate jpa jpa-2.0


【解决方案1】:

尽管我看不到在 CatalogPackage 中定义 setter 方法的问题,因为它们可以标记为 private 以避免从外部世界使用它们。 由于您没有粘贴实体配置,并且您说 Hibernate 抱怨 setter 方法,我可以得出结论,您正在使用您的 getter 来描述您的实体映射,对吧?

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

所以您有以下任一解决方案:

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

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

【讨论】:

  • 谢谢! AccessType.FIELD 很有用,我现在一直在使用它来实现我想要做的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2011-09-11
相关资源
最近更新 更多