2013-07-17 15 views
0

比方說,我有實體:JPA如何處理實體中的空值?

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

在數據庫列field有默認值「欄」。

如果我堅持這個實體沒有將field屬性設置爲null以外的任何屬性,插入記錄中的字段列的值是nullbar

(在換句話說,將空場被包含在INSERT語句與null值或將在INSERT語句被跳過,默認值將被使用?)

回答

2

使用註釋

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

將阻止將field屬性添加到生成的SQL中。然後將使用列默認值。

否則null字段將被包含在與null值插入語句中。如果列標記爲not null,則會引發數據庫錯誤。但是如果null是該列的有效值,那麼null將被保留。

0

如果你的數據庫表對於一個給定的列有一個非空約束,那麼持久化你的實體將會拋出一個異常,並給出一個消息。 如果您的數據庫表允許該特定列的空值持續存在,那麼即使您的表具有默認值,具有空字段的實體也會將該字段設置爲null。 我可能是錯的,但這是我在我的項目中使用JPA繪製的觀察結果。