Hibernate不会将Discriminator Column添加到Table

时间:2011-11-15 18:36:09

标签: java hibernate inheritance

我之前有过这个实体

@Entity
@Table(name = "SOMETABLE")
@AccessType("field")
public class SomeEntity implements java.io.Serializable {

然后我把它改成了

@Entity
@Table(name = "SOMETABLE")
@AccessType("field")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING, length = 20)
@DiscriminatorValue(value = "Some")
public class SomeEntity implements java.io.Serializable {

我添加了一些子类

@Entity
@DiscriminatorValue(value = "SomeOther")
public class SomeOtherEntity extends SomeEntity {

Hibernate不为之前的行添加新的Discriminator列到SOMETABLE。

它正在添加我在SomeEntity中定义的其他新列。 @ForceDiscriminator似乎没有做任何事情。如何让列以干净的方式显示?

1 个答案:

答案 0 :(得分:2)

我回答了自己的问题。 Hibernate无法添加新的非空列,而Discriminator是非空列。修复它的方法是添加columnDefinition以指定默认值

@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING, columnDefinition = "varchar default 'SomeOther'" , length = 20)

因此,这将默认所有没有鉴别器的行都是SomeOtherEntity类型。

但是,这不是一个好的解决方案,因为它会强制您使用可能是数据库特定的varchar。所以感谢Hibernate不允许将声明的实体更改为超类。