是否有可能强制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需要在父节点和所有子节点之间创建连接,而不仅仅是父节点和一个子节点。
答案 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)吗?