java - 在 Hibernate 中使用注释定义默认列值

标签 java hibernate ddl

我知道这里和网上有很多这样的问题,但所有答案都建议使用 columnDefinition ,它是特定于数据库的,因此不适用于我,因为我的系统处理需要在不同的数据库上运行。

我找到了这个 hibernate issue有人请求此功能进行注释的地方。该问题已关闭,说明 another issue将涵盖该功能。第二个问题显然添加了注释 @Generated 和其他一些注释,但我找不到任何关于如何使用这些新注释定义默认列值的文档。

所以我的问题是:有谁知道如何使用注释定义默认列值(而不是使用 columnDefinition)?

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

最佳答案

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

@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

}

关于java - 在 Hibernate 中使用注释定义默认列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107554/

相关文章:

mysql - 什么更好,许多重复的行或增加表格?

sql - 如何在 oracle 中的现有表上生成(或获取)ddl 脚本?我必须在 Hive 中重新创建它们

java - 旋转缓冲图像

java - 可以将复选框添加到 SWT Group Border

java - 对对象图中的孤立对象进行单元测试

java - Hibernate 4.1 错误 : Could not create DynamicParameterizedType for type: org. hibernate.type.EnumType

mysql - 由父表中的部分主键组成的复合外键

SQL ON DELETE CASCADE 不起作用

javascript - Vue js,缺少从 HTML 到相关 JS 的映射

java - Cucumber框架创建