簡體   English   中英

具有復合ID休眠的動態更新

[英]Dynamic Update with composite id hibernate

在休眠模式下,如果啟用了動態更新,則在更新對象時,它僅對修改后的列生成查詢

考慮使用組件的帶有Composite-id的類。 復合ID saveOrupdate對象。 如果給定的鍵不是數據庫,則添加否則更新對象

現在我想要的是如何合並這兩個功能? 例如,我有一個具有年齡,工資,地址和復合鍵ID和名稱的3個屬性的類。

對於鍵“ 1-Mohan”,我已經有以下條目:年齡= 22,薪水= 30000,地址= XXX。 現在,我只想將其薪水更新為40000。當我用鍵“ 1-mohan”創​​建一個新實例並僅設置薪水= 4000並保持不變時。 現在記錄填充了年齡和地址的空值,因為動態更新僅發生在從數據庫中獲取的對象上。

有什么方法可以保持其現有值不變並僅更新給定屬性,而無需從DB中獲取對象?

dynamic-update設置為true不會為其他字段設置null值,而是只會更新已修改的字段。

例如,在您的示例中,hibernate生成的查詢將類似於:

 UPDATE USER_TABLE SET SALARY=? 
    WHERE ID=? AND NAME=?

因此,不會為其他字段設置null值。

更新:

現在,根據您在注釋中的解釋,該問題與dynamic-update無關。

您要做的是首先使用Session.get根據composite-id獲取對象。 現在,您的對象將設置所有字段。 現在更新salary字段,然后調用saveOrUpdate方法。

如果dynamic-updatefalse那么hibernate將通過包含所有字段來生成update查詢。

 UPDATE USER_TABLE SET SALARY=?, AGE=?, ADDRESS=? 
    WHERE ID=? AND NAME=?

如果dynamic-updatetrue那么休眠將通過僅包含我的答案中提到的salary字段來生成update查詢。

 UPDATE USER_TABLE SET SALARY=? 
    WHERE ID=? AND NAME=?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM