我之前有过这个实体
@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似乎没有做任何事情。如何让列以干净的方式显示?
答案 0 :(得分:2)
我回答了自己的问题。 Hibernate无法添加新的非空列,而Discriminator是非空列。修复它的方法是添加columnDefinition以指定默认值
@DiscriminatorColumn(name = "DISCRIMINATOR", discriminatorType = DiscriminatorType.STRING, columnDefinition = "varchar default 'SomeOther'" , length = 20)
因此,这将默认所有没有鉴别器的行都是SomeOtherEntity类型。
但是,这不是一个好的解决方案,因为它会强制您使用可能是数据库特定的varchar。所以感谢Hibernate不允许将声明的实体更改为超类。