1

在休眠状态下,如果启用了动态更新,则在更新对象时,它只会为修改的列生成查询

考虑一个使用组件的具有复合 ID 的类。Composite-id 保存或更新对象。如果给定的键不是 DB,则添加否则更新对象

现在我想要的是如何合并这两个功能?例如,我有一个具有 3 个属性年龄、薪水、地址和复合键 id 和名称的类。

对于键“1-Mohan”,我已经有年龄 =22、工资 =30000、地址 =XXX 的条目。现在我只想将其薪水更新为 40000。当我使用键“1-mohan”创​​建一个新实例并仅设置薪水 = 4000 并持续存在时。现在记录填充年龄和地址的空值,因为动态更新只发生在从数据库中获取的对象上。

有什么方法可以保持其现有值不变并仅更新给定属性而不从数据库中获取对象?

4

1 回答 1

0

设置dynamic-updatetrue不会null为其他字段设置值,而只会更新已修改的字段。

例如,在您的示例中,hibernate 生成的查询将类似于:

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

所以它不会null为其他字段设置值。

更新:

现在根据您在评论中的解释,该问题与dynamic-update.

您要做的是首先使用Session.get基于composite-id. 现在您的对象将设置所有字段。现在更新salary字段,然后调用saveOrUpdate方法。

如果dynamic-update是,false那么休眠将update通过包含所有字段来生成查询。

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

如果dynamic-update是,true那么休眠将通过仅包含我的回答中提到update的字段来生成查询。salary

 UPDATE USER_TABLE SET SALARY=? 
    WHERE ID=? AND NAME=?
于 2014-09-23T06:39:08.547 回答