一个小例子 @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); 会执行此语句 pre > insert into mytable(code,SourceFrom)values(10,NULL) MyTable t = new MyTable(); t.setCode(10); t.setSourceFrom(MANUAL INSERT); session.save(t); 会执行此语句 pre > insert into mytable(code,SourceFrom)values(10,'MANUAL INSERT') 如果使用 @DynamicInsert 注释 MyTable ,第一个示例会生成这样的语句: pre $ insert into mytable(code)values(10) 您可以看到字段 SourceFrom 的值未指定,并且已插入到数据库表中的值已定义通过列定义的默认值('Case'在本例中)。 , @PrePersist 或其他解决方案)仍然有效。 I have use columnDefinition to specify default value for a column, however it does not store default value it stores null only,Please help regarding this, below is my codeprivate String sourceFrom;@Column(name = "SourceFrom", columnDefinition = "varchar(15) default 'Case'")public String getSourceFrom() { return sourceFrom;}public void setSourceFrom(String sourceFrom) { this.sourceFrom = sourceFrom;} 解决方案 @Column.columnDefinition is used during DDL phase to create your table and NOT during normal program running; probably you have to work with @DynamicInsert/@DynamicUpdate: this annotations insert (or update) only properties you setted into you POJO and let RDBMS to manage other fields.A small example@Entityclass MyTable { @Id private int code; @Column(name = "SourceFrom", columnDefinition = "varchar(15) default 'Case'") private String sourceFrom; }and this is the generated code from DDL phasecreate table mytable (code integer not null,SourceFrom varchar(15) default 'Case')MyTable t = new MyTable();t.setCode(10);session.save(t);will do this statementinsert into mytable (code, SourceFrom) values (10,NULL)MyTable t = new MyTable();t.setCode(10);t.setSourceFrom("MANUAL INSERT");session.save(t);will do this statementinsert into mytable (code, SourceFrom) values (10,'MANUAL INSERT')If you annotate MyTable with @DynamicInsert the first example will generate this statementinsert into mytable (code) values (10)As you can see the value of field SourceFrom is not specified and value inserted into database table is defined by column definition default value ('Case' in this case).Manual processing of default value (in setter, with @PrePersist or other solution) are still valid. 这篇关于默认值不工作在休眠的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 10-16 08:37