假设我有实体:
@Entity
public class foo(){
String field = null;
//getter and setter
}
在数据库列field
中,默认值为“bar”。
如果我将此实体保留而未将field
属性设置为null以外的任何内容,插入记录中的字段列是否会具有值null
或bar
?
(换句话说,null字段是否会包含在带有null
值的insert语句中,还是会在insert语句中被跳过并使用默认值?)
答案 0 :(得分:2)
使用注释
@Column(insertable = false)
private String field = null;
将阻止将field
属性添加到生成的SQL中。然后将使用列默认值。
否则null
字段将包含在带有null
值的insert语句中。如果该列标有not null
,则会引发数据库错误。但如果null
是该列的有效值,则null
将被保留。
答案 1 :(得分:0)
如果您的数据库表对给定列具有非空约束,则持久化您的实体将抛出异常,并在消息中为给定列接受Null值。 如果数据库表允许该特定列的空值,则持久化具有空字段的实体将将该字段设置为null,即使您的表具有默认值也是如此。 我可能错了,但这是我在项目中使用JPA所得到的观察结果。