1. 程式人生 > >hibernate對資料庫欄位default值的處理

hibernate對資料庫欄位default值的處理

資料庫欄位中如果有default值,在使用hibernate時插入新的資料,如果不給值,該欄位依然會被插入為null。

解決方法是在class中配置:

   <class name="Goods" table="ms_goods" dynamic-insert="true">   
在Hibernate的對映檔案的class tag使用dynamic-insert,dynamic-update,可以優化生成的SQL語句,提高SQL執行效率,最終可以提高系統性能。

dynamic-update (可選, 預設為 false): 指定用於UPDATE 的SQL將會在執行時動態生成,並且只更新那些改變過的欄位。 
dynamic-insert (可選, 預設為 false):

指定用於INSERT的 SQL 將會在執行時動態生成,並且只包含那些非空值欄位。 

      需要注意的是dynamic-update和dynamic-insert的設定並不會繼承到子類, 所以在<subclass>或者<joined-subclass>元素中可能 需要再次設定。 效能問題:SQL update語句是預先生成的,如果加上dynamic的話,每次update的時候需要掃描每個屬性的更改,然後生成update,效率會稍微有點影響。 如果不是有特殊的需求,預設就好了。 如果你一次更新多條記錄,hibernate將不能使用executeBatch進行批量更新,這樣效率降低很多。同時,在這種情況下,多條sql意味著資料庫要做多次sql語句編譯。 

    綜上,應否使用要根據具體問題具體分析了,如果一個表字段比較多,並且經常只是更新一條記錄的一兩個欄位,那麼動態更新會更有效些。而且生成的SQL語句也容易懂。