【问题标题】:discriminator column is not working with table per subclass鉴别器列不适用于每个子类的表
【发布时间】:2014-03-24 10:31:03
【问题描述】:

大家好,

我在每个子类继承映射表中使用鉴别器列。这是父类的入口

@Entity  
@Table(name = "employee105")
@Inheritance(strategy=InheritanceType.JOINED)   
@DiscriminatorColumn(name="emp_type" , discriminatorType= DiscriminatorType.STRING) 

及子类条目如下:

@Entity  
@Table(name="contractemployee105")
@DiscriminatorValue("P")
@PrimaryKeyJoinColumn(name="ID") 

@Entity  
@Table(name="regularemployee105")
@DiscriminatorValue("T")
@PrimaryKeyJoinColumn(name="ID") 

我知道我的代码是正确的并且正在生成表,但在插入查询中没有创建鉴别器列。我正在使用如图所示的罐子。请让我知道这个问题。我怀疑这是 JARS 或休眠版本的问题。谢谢

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    这很可能是因为您怀疑您的休眠版本有问题。错误HHH-6911 正是这个问题,并在 Hibernate 4.2.9、4.3.1 中得到解决。如果您的休眠版本较早,您可能需要升级。 (看看你的罐子列表,确实是这样。)

    正如 Stefan 的回答中所述,Hibernate 在这种情况下不需要鉴别器,但 JPA 规范说如果指定它应该被允许和持久化。

    【讨论】:

      【解决方案2】:

      使用每个子类的表,您不需要鉴别器。 Hibernate 通过在相关表中查找记录来确定子类。

      【讨论】:

      • 感谢 stefan 的回复,但我在获取对象时遇到了问题。员工 emp = (Employee)session.load(Employee.class, 2);请告诉我如何获取属于其中一个子类的对象,我不知道 id 属于哪种类型的员工。
      • @rishi - 您的意思是您的负载失败还是您不知道负载后的类型?如果是后者,你可能只需要一个 instanceof 检查。
      猜你喜欢
      • 1970-01-01
      • 2011-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多