我columnDefinition用来指定列的默认值,但它不存储它只存储null的默认值,
请帮忙解决这个问题,下面是我的代码
private String sourceFrom;
@Column(name = "SourceFrom", columnDefinition = "varchar(15) default 'Case'")
public String getSourceFrom() {
return sourceFrom;
}
public void setSourceFrom(String sourceFrom) {
this.sourceFrom = sourceFrom;
}
Run Code Online (Sandbox Code Playgroud)
@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;
}
Run Code Online (Sandbox Code Playgroud)
这是DDL阶段生成的代码
create table mytable (code integer not null,SourceFrom varchar(15) default 'Case')
Run Code Online (Sandbox Code Playgroud)
MyTable t = new MyTable();
t.setCode(10);
session.save(t);
Run Code Online (Sandbox Code Playgroud)
会做这个陈述
insert into mytable (code, SourceFrom) values (10,NULL)
Run Code Online (Sandbox Code Playgroud)
MyTable t = new MyTable();
t.setCode(10);
t.setSourceFrom("MANUAL INSERT");
session.save(t);
Run Code Online (Sandbox Code Playgroud)
会做这个陈述
insert into mytable (code, SourceFrom) values (10,'MANUAL INSERT')
Run Code Online (Sandbox Code Playgroud)
如果MyTable使用@DynamicInsert第一个示例进行注释将生成此语句
insert into mytable (code) values (10)
Run Code Online (Sandbox Code Playgroud)
如您所见,SourceFrom未指定field的值,并且插入到数据库表中的值由列定义默认值('Case'在本例中)定义.
手动处理默认值(在setter中,使用@PrePersist或其他解决方案)仍然有效.
| 归档时间: |
|
| 查看次数: |
5618 次 |
| 最近记录: |