我知道SO和网络上都有很多这些问题,但是所有答案都建议使用columnDefinition特定于数据库的信息,因此不适用于我,因为我正在使用的系统需要在不同的数据库上运行。
columnDefinition
我发现这个hibernate问题,有人要求使用此功能进行注释。该问题已经解决,表示另一个问题将涉及该功能。第二个问题显然添加了注释@Generated以及其他一些注释,但是我找不到有关如何使用这些新注释定义默认列值的文档。
@Generated
所以我的问题是:有谁知道我该如何定义带注释的默认列值(而不是使用columnDefinition)?
编辑: 进一步澄清我的问题:当我添加新的非null列时,我需要Hibernate更新现有架构(将新列添加到相应的表中)。但是由于该列不为null,因此数据库无法在不指定默认值的情况下创建该列(如果表中已经存在某些行)。因此,我需要指示Hibernate发出以下DDL语句:ALTER TABLE my_table ADD COLUMN new_column VARCHAR(3) DEFAULT 'def',但它必须独立于所使用的数据库。
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 }