2013-02-08 99 views
1

我正在使用Hibernate 4.1.7.Final並嘗試使用session.merge(entity)方法更新對象。實體標註有:Hibernate @SelectBeforeUpdate(true)和@DynamicUpdate(true)不能與session.merge一起使用

@SelectBeforeUpdate(true)@DynamicUpdate(true)

然而,我發現,合併方法會覆蓋原有的非空字段(在先前堅持實體)與實體空值被合併 - 這是我不想要。我認爲@DynamicUpdate只會更新非空值。

在Hibernate文檔的合併方法的描述是:

複製給定對象的狀態到具有 相同標識符持久對象。如果當前沒有與會話關聯的持久實例 ,它將被加載。返回持久的 實例。如果給定實例未保存,請保存其副本並將其作爲新持久實例返回 。給定的實例不會成爲與會話關聯的 。如果關聯映射爲級聯=「合併」,則該操作級聯到關聯的 實例

任何想法有什麼問題?

謝謝。

回答

0

兩件事是我能想到的迅速:

  1. 據(如果你使用JPA @Version註釋)到Hibernate文檔,版本/時間戳列應作爲以一個樂觀鎖定的策略會議。 merge()正確處理對分離實例所做的修改。確保使用此策略。

  2. @SelectBeforeUpdate和@DynamicUpdate不可繼承,因此請確保註釋了正確的實體。

相關問題