2014-04-25 79 views
9

Stuck on the same problem有什麼方法在更新Hibernate中的數據庫時忽略null值?在休眠狀態下更新數據庫時忽略空值

每當你調用update();的會話,它也會更新在對象中找到的空值。

實施例:

User user = new User(); 
user.setUserId(5); 
user.setUserName("Maarten"); 
user.setUserFirstName(null); // but in database this value is not null 

session.update(user); 

OR

session.saveOrUpdate(user); 

的DB現在將更新的用戶,但將設置用戶姓名爲空(因爲它是在對象爲空)。

在Hibernate中是否有任何方法或方法來避免這種情況(我不想觸發選擇/更新查詢來設置bean)?它會忽略空值?

+1

可能重複[我怎樣才能防止從休眠更新NULL值(http://stackoverflow.com/questions/7517546/how-can- i-prevent-hibernate-from-updating-null-values) –

+0

所以你想設置FirstName值作爲它以前在數據庫中的值。你不想更新FirstName Right嗎? – Gundamaiah

+0

@Ganesh你是對的。 – Vishrant

回答

0

這取決於你想控制的抽象層次和對象的業務規則:

  • 是場真的空的,或者你只是用它作爲DTO?也許你需要一箇中間對象來控制空值
  • 新用戶會發生什麼情況(如示例中所示)?我應該忽略空值,然後應該保留哪個值,默認值?

如果無論如何,您在較低的層次上定義您的必需品,例如, 「不包含更新查詢中的空值」,您可以使用以下內容:

  • sql-update註釋here。您可以使用自定義的SQL查詢或過程控制值
  • dynamicUpdate約爲變化,而不是價值,所以我認爲這是不是真的適合
  • 使用EntityListener,如果需要輔助瞬態場還原更改。
  • 其他選項:使用interceptor甚至創造的custom dialect