2011-11-14 39 views
9

更新模型的最佳做法是什麼,只有某些字段是要更新的?部分更新休眠模型

例如,

如果我有一個人的模型:

名稱 生日 地址

而且在這裏我只想更新形式:

地址

兩個選項,我可以現在看到的是:

  1. 要有一個只有地址的自定義表單模型 - 在回發中調用數據庫來檢索我的對象以填寫名稱和出生日期,然後將其保留回數據庫。
  2. 自定義更新SQL以僅更新相關字段。

如果可能,我寧願使用hibernate模型,所以我現在使用#1。

有沒有更好的方法?

+0

這是一個與性能相關的問題或業務案例問題,因爲名稱和地址已更改,但您只希望地址更新? –

回答

6

Hibernate如何構造一個SQL Update,可以配置爲僅使用an attribute called dynamic-update on the class mapping更新已更改的字段。

如果hibernate留下了像這樣有用的功能,在默認情況下取消激活,這是因爲要進行折衷。鏈接的文檔繼續說:

動態更新和動態插入設置不會被子類繼承,所以它們也可以在or元素上指定。雖然這些設置可能會在某些情況下提高性能,但實際上可能會降低其他性能。

+4

+1,只是要注意,如果使用註釋,你可以有'@ org.hibernate.annotations.Entity(dynamicUpdate = true)' – Bozho

+0

不幸的是,由於時間限制,我不得不繼續前進。這似乎是最好的選擇,當我有機會時我會測試它。謝謝! – Donald

+0

@Donald:要知道,如果hibernate留下這樣有用的功能就像這樣在默認情況下取消激活,那是因爲要進行折衷。我鏈接到的文檔說:「動態更新和動態插入設置不會被子類繼承,因此它們也可以在元素上指定。儘管在某些情況下這些設置可以提高性能,他們實際上可能會降低其他人的表現。「 –

2

最佳實踐是跳過性能優化,直到您需要爲止。