2010-11-25 25 views
18

是否有可能强制hibernate使用继承类型加入的鉴别器列? 根据JPA2.0规范,这应该是可能的,但我不能在休眠中实现它。Discriminator in InheritanceType.JOINED

实施例:

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

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

使用hibernate.hbm2ddl.auto创建时,这甚至不创建该表PARENT列类型。

我知道InheritanceType.JOINED的工作原理没有定义鉴别器列,但它是无效的,因为那时hibernate需要在鉴别器列中使用信息时,在父代和所有孩子之间创建连接,而不是只有父代和一个孩子。

+1

进一步的搜索看起来像它不是支持者通过Hibernate注释:http://opensource.atlassian.com/projects/hibernate/browse/ANN-140 – milbr 2010-11-25 10:13:47

回答

1

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

+0

不,我不想,我想在数据库中规范化模式。使用InheritanceType.SINGLE_TABLE添加某个子项时,必须更改我希望避免的父表的结构(添加一些列)。 – milbr 2010-11-25 12:23:40

+1

从我记忆中不支持连接继承的鉴别器列。让我为你升级hibernate doc。 – 2010-11-25 12:29:54

12

我在子类上使用了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 

当你添加一个新的子类,你添加一个新的表,其中有相关的扩展数据字段。

相关问题