在 Hibernate 中使用注释定义默认列值
Define default column value with annotations in Hibernate
我知道这里和网上有很多这样的问题,但所有答案都建议使用 columnDefinition
,它是特定于数据库的,因此不适用于我,因为我正在使用的系统需要 运行 在不同的数据库上。
我发现这个 hibernate issue where someone requested this feature for annotations. The issue has been closed saying that another issue 将涵盖该功能。第二个问题显然添加了注释 @Generated
和其他一些注释,但我找不到任何关于如何使用这些新注释定义默认列值的文档。
所以我的问题是:有谁知道如何定义带注释的默认列值(而不是使用 columnDefinition
)?
编辑: 进一步阐明我的问题:当我添加一个新的非空列时,我需要 Hibernate 更新现有模式(将新列添加到相应的 table).但是由于该列是非空的,数据库无法在不指定默认值的情况下创建该列(如果 table 中已经有一些行)。所以我需要指示 Hibernate 发出以下 DDL 语句:ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def'
,但它必须独立于所使用的数据库。
我认为您不需要任何文档,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
}
以下对我有用。
@ColumnDefault("'0.0'")
@Column(名称="avgRating")
私人浮动平均评级;
我知道这里和网上有很多这样的问题,但所有答案都建议使用 columnDefinition
,它是特定于数据库的,因此不适用于我,因为我正在使用的系统需要 运行 在不同的数据库上。
我发现这个 hibernate issue where someone requested this feature for annotations. The issue has been closed saying that another issue 将涵盖该功能。第二个问题显然添加了注释 @Generated
和其他一些注释,但我找不到任何关于如何使用这些新注释定义默认列值的文档。
所以我的问题是:有谁知道如何定义带注释的默认列值(而不是使用 columnDefinition
)?
编辑: 进一步阐明我的问题:当我添加一个新的非空列时,我需要 Hibernate 更新现有模式(将新列添加到相应的 table).但是由于该列是非空的,数据库无法在不指定默认值的情况下创建该列(如果 table 中已经有一些行)。所以我需要指示 Hibernate 发出以下 DDL 语句:ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def'
,但它必须独立于所使用的数据库。
我认为您不需要任何文档,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
}
以下对我有用。
@ColumnDefault("'0.0'")
@Column(名称="avgRating")
私人浮动平均评级;