JPA如何处理实体中的空值?

时间:2013-07-17 08:44:08

标签: java jpa null

假设我有实体:

@Entity
public class foo(){
  String field = null;
  //getter and setter
}

在数据库列field中,默认值为“bar”。

如果我将此实体保留而未将field属性设置为null以外的任何内容,插入记录中的字段列是否会具有值nullbar

(换句话说,null字段是否会包含在带有null值的insert语句中,还是会在insert语句中被跳过并使用默认值?)

2 个答案:

答案 0 :(得分:2)

使用注释

@Column(insertable = false)
private String field = null;

将阻止将field属性添加到生成的SQL中。然后将使用列默认值。

否则null字段将包含在带有null值的insert语句中。如果该列标有not null,则会引发数据库错误。但如果null是该列的有效值,则null将被保留。

答案 1 :(得分:0)

如果您的数据库表对给定列具有非空约束,则持久化您的实体将抛出异常,并在消息中为给定列接受Null值。 如果数据库表允许该特定列的空值,则持久化具有空字段的实体将将该字段设置为null,即使您的表具有默认值也是如此。 我可能错了,但这是我在项目中使用JPA所得到的观察结果。