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