在 hibernate 中,如果启用动态更新,则在更新对象时,它仅生成针对修改列的查询
考虑一个使用组件的具有composite-id 的类。 Composite-id 保存或更新对象。如果给定的键不是 DB,则添加,否则更新对象
现在我想要的是如何合并这两个功能?例如,我有一个具有 3 个属性年龄、薪水、地址以及复合键 id 和名称的类。
对于键“1-Mohan”,我已经有年龄 =22、薪水 =30000、地址 =XXX 的条目。现在我只想将其工资更新为 40000。当我使用键“1-mohan”创建一个新实例并仅设置工资 = 4000 并持续存在时。现在,记录填充年龄和地址的空值,因为动态更新仅发生在从数据库获取的对象上。
有什么方法可以保留其现有值不变并仅更新给定属性而不从数据库中获取对象吗?
最佳答案
将dynamic-update
设置为true
不会为其他字段设置null
值,而只会更新被修改的字段。
例如,在您的示例中,hibernate 生成的查询将类似于:
UPDATE USER_TABLE SET SALARY=?
WHERE ID=? AND NAME=?
因此它不会为其他字段设置 null
值。
更新:
现在根据您在评论中的解释,该问题与动态更新
无关。
您要做的就是首先使用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
,那么hibernate将通过仅包含salary
字段来生成update
查询正如我的回答中提到的。
UPDATE USER_TABLE SET SALARY=?
WHERE ID=? AND NAME=?
关于java - 使用复合 id hibernate 进行动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988055/