InheritanceType.JOINED中的判别器

时间:2010-11-25 09:32:49

标签: hibernate

是否有可能强制hibernate使用discriminator列来连接继承类型? 根据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需要在父节点和所有子节点之间创建连接,而不仅仅是父节点和一个子节点。

2 个答案:

答案 0 :(得分:14)

我在SINGLE_TABLE上使用了Discriminator和SecondaryTable来完成这件事。 I.E.

@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

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

答案 1 :(得分:1)

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