[英]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-update
為false
那么hibernate將通過包含所有字段來生成update
查詢。
UPDATE USER_TABLE SET SALARY=?, AGE=?, ADDRESS=?
WHERE ID=? AND NAME=?
如果dynamic-update
為true
那么休眠將通過僅包含我的答案中提到的salary
字段來生成update
查詢。
UPDATE USER_TABLE SET SALARY=?
WHERE ID=? AND NAME=?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.