@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