2009-02-04 113 views
1

有沒有辦法減少SQL插入和SQL更新中的不必要/空字段?優化Hibernate實體保存?

例如,我有一個hibernate實體類映射到一個有10列的表。數據填充實際上分兩個階段完成。當用戶提交請求時,我會將請求信息插入帶有hibernate實體的表中,但只填充7個字段。經過一些處理(例如等待其他用戶交互)後,我將填充剩餘的3個字段(使用前一個插入的ID)。

如果我堅持單個實體類,所述第二更新,我做的步驟如下:

1)裝載由id標識的實體

2)保存實體,其產生SQL似乎在發送所有的字段。

或者,我創建了兩個實體類,並指向同一個表並單獨保存它們。

有沒有人有更好的建議?

肯特

編輯:

我真正想實現的東西以下效果:(?,?,?) 插入T(ID,FIELD1,FIELD2) 更新t將字段3 =?字段4 =?其中id =?

我現在dynamicUpdate =真 插入T(ID,FIELD1,FIELD2)(?,?,?) 選擇場,場2,字段3,字段4在t可以達到最佳的其中id =? update t set field3 =?字段4 =?其中id =?

有沒有辦法消除這個select語句?插入後,原始的持久對象不會存儲在內存中的任何位置。

附加說明。實體類用Hibernate驗證進行註釋。我目前正在嘗試達到上述預期效果,所以我評論了他們。但是當我將它們重新打開時,由於@NotNull和@NotEmpty,我得到驗證錯誤。

+0

dynamicUpdate = true完美。 – sqlnewbie 2011-04-01 06:43:01

回答

3

如果您添加註釋:

@org.hibernate.annotations.Entity(dynamicUpdate = true) 

你的實體頂部只有已更改的字段將被髮送到數據庫。

+0

我試了一下,它的工作原理。但是有沒有辦法消除我必須首先加載實體的步驟?我想消除額外的'選擇'語句到數據庫(假設該實體沒有在會話中緩存) – 2009-02-04 10:49:23