【问题标题】:Discriminator in InheritanceType.JOINEDInheritanceType.JOINED 中的鉴别器
【发布时间】:2010-11-25 09:32:49
【问题描述】:

是否可以强制休眠使用鉴别器列来连接继承类型? 根据 JPA2.0 规范,这应该是可能的,但我无法在休眠中实现。

例子:

@Inheritance(strategy = InheritanceType.JOINED)
@ForceDiscriminator
@DiscriminatorColumn(name="TYPE")
@Entity
public class Parent

@Entity
@DiscriminatorValue("C")
public class Child extends Parent

当使用 hibernate.hbm2ddl.auto create 时,这甚至不会在表 PARENT 中创建列 TYPE。

我知道 InheritanceType.JOINED 可以在不定义鉴别器列的情况下工作,但它非常无效,因为当使用鉴别器列中的信息时,hibernate 需要在父级和所有子级之间创建连接,而不仅仅是父级和一个子级。

【问题讨论】:

标签: hibernate


【解决方案1】:

我在子类上使用了SINGLE_TABLE 和一个鉴别器和一个SecondaryTable 来做这件事。 IE。

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
@Entity
public class Parent

@Entity
@DiscriminatorValue("C")
@SecondaryTable(name = "child", pkJoinColumns = {@PrimaryKeyJoinColumn(name="id", referencedColumnName = "id")})
public class Child extends Parent

当您添加一个新的子类时,您会添加一个包含相关扩展数据字段的新表。

【讨论】:

  • 这对我来说似乎无关紧要。
  • @DiscriminatorValue("C") 在这个属性中我们可以放置原始类型还是对象类型,因为将这个 C 作为一个值它使它更严格不能是对象类型,但它不是工作
【解决方案2】:

您要使用@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 吗?

【讨论】:

  • 不,我不想,我想在数据库中有标准化的模式。使用 InheritanceType.SINGLE_TABLE 添加一些子项时,您必须更改父表的结构(添加一些列),这是我想避免的。
  • 我记得不支持关于连接继承的鉴别器列。让我为您搜索休眠文档。
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多