@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);
如果注释MyTable
与@DynamicInsert
第一个例子会产生这种说法
insert into mytable (code) values (10)
正如你所看到现场SourceFrom
的价值会做这种说法
insert into mytable (code, SourceFrom) values (10,'MANUAL INSERT')
没有被指定,并且定义了插入到数据库表中的值按列定义默认值(在这种情况下为'Case'
)。
手动处理默认值(在setter中,使用@PrePersist
或其他解决方案)仍然有效。
我已经试过这个,但它不保存case对象之前调用'preInsert' – commit