2014-01-20 50 views
12

我是在開始我的應用程序使用這2個休眠註解。休眠@DynamicUpdate(值=真)@SelectBeforeUpdate(值=真)表現

@DynamicUpdate(value=true) 
@SelectBeforeUpdate(value=true) 

首先我會試着解釋我對它的理解,以瞭解我是否正確。

@DynamicUpdate(value=true) 

更新只在實體Hibernate needs to track those changes

@SelectBeforeUpdate(value=true) 

modified values創建updateselect知道哪個屬性已經改變,這是有用的,當實體已經被加載和更新不同的會話Hibernate is out of tracking entity changes

是這2個肯定是否正確?

我主要關注的是。

DB performance這是更好或更快更新所有的在實體領域的一次generate a select to know which columns update and update only the modified columns?

+0

你找到一個答案? – membersound

+0

還沒有...好傷心... – chiperortiz

回答

9

的情況取決於你的情況。如果你的表非常簡單(沒有外鍵約束,只有少量列,少量索引),那麼更新整個記錄會更快。

但是,如果你的表有很多外鍵約束和索引,它會更快首先選擇,然後更新的差異。這是因爲PostgreSQL有做了以下工作在更新每一列:

  • 檢查外鍵約束
  • 更新相關指標

此外,修改添加膨脹的表必須通過真空清理。

請記住,如果你的數據庫上使用dynamicUpdate有許多表,您的更新看起來非常不同,你會開始驅逐緩存的查詢計劃。這些計劃花費資源來計算新鮮度。儘管如此,緩存的計劃可能只會對後續的同一會話中的查詢有用。