在Hibernate中使用注解定义默认列值

gzjq41n4  于 2023-11-21  发布在  其他
关注(0)|答案(2)|浏览(177)

我知道在SO和网络上有很多这样的问题,但是所有的答案都建议使用columnDefinition,这是特定于数据库的,因此不适用于我,因为我正在工作的系统需要在不同的数据库上运行。
我发现了这个hibernate issue,有人请求了这个注解功能。这个问题已经关闭,说another issue将覆盖这个功能。第二个问题显然添加了注解@Generated和其他一些,但我找不到任何关于如何使用这些新注解定义默认列值的文档。
所以我的问题是:有谁知道如何用注解(而不是使用columnDefinition)定义默认列值吗?

**编辑:**进一步澄清我的问题:当我添加一个新的非空列时,我需要Hibernate来更新现有的模式(将新列添加到相应的表中)。但由于该列为非空值,因此数据库无法在不指定默认值的情况下创建该列(如果表中已经有一些行)。所以我需要指示Hibernate发出以下的ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def'语句,但它必须独立于所使用的数据库。

polkgigr

polkgigr1#

我不认为你需要任何文档,java文档是自我解释的。如果我理解正确的话,你需要一种方法来设置字段的默认值。如果是的,请看下面的代码片段。

@Entity
@Table(name = "my_entity")
public class SomeEntity extends BaseEntity {

public static final class MyValueGenerator implements
        ValueGenerator<String> {
    @Override
    public String generateValue(Session session, Object owner) {
        return "This is my default name";
    }
}

@Basic
@Column(name = "name", insertable = true, updatable = true, nullable = false, length = 255)
// This will add a DDL default
@ColumnDefault("'This is my default name'")
// This will add a runtime default.
@GeneratorType(type = MyValueGenerator.class)
private String name;

// getters and setters

}

字符串

mctunoxg

mctunoxg2#

下面的代码是为我工作。

@ColumnDefault("'0.0'")
@Column(name = "avgRating")
private float avgRating;

字符串

相关问题