gpt4 book ai didi

java - Hibernate 不会将鉴别器列添加到表中

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:05 24 4
gpt4 key购买 nike

我以前有这个实体

@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 不会为之前存在的行向 SOMETABLE 添加新的鉴别器列。

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

最佳答案

我回答了我自己的问题。 Hibernate 无法添加新的非空列并且鉴别器是非空列。修复它的一种方法是添加 columnDefinition 以指定默认值

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

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

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

关于java - Hibernate 不会将鉴别器列添加到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com