@Column.columnDefinition 在 DDL 阶段用于创建表,而不是在正常程序运行期间使用;可能您必须使用@DynamicInsert/@DynamicUpdate:此注释仅插入(或更新)您在 POJO 中设置的属性,并让 RDBMS 管理其他字段。
一个小例子
@Entity
class MyTable {
@Id
private int code;
@Column(name = "SourceFrom", columnDefinition = "varchar(15) default 'Case'")
private String sourceFrom;
}
这是从 DDL 阶段生成的代码
create table mytable (code integer not null,SourceFrom varchar(15) default 'Case')
MyTable t = new MyTable();
t.setCode(10);
session.save(t);
会做这个声明
insert into mytable (code, SourceFrom) values (10,NULL)
MyTable t = new MyTable();
t.setCode(10);
t.setSourceFrom("MANUAL INSERT");
session.save(t);
会做这个声明
insert into mytable (code, SourceFrom) values (10,'MANUAL INSERT')
如果您用@DynamicInsert 注释MyTable,第一个示例将生成此语句
insert into mytable (code) values (10)
如您所见,字段SourceFrom 的值未指定,插入到数据库表中的值由列定义默认值(在本例中为'Case')定义。
手动处理默认值(在setter中,用@PrePersist或其他解决方案)仍然有效。