我开始在我的APP中使用这2个休眠注释。
@DynamicUpdate(value=true)
@SelectBeforeUpdate(value=true)
首先,我将尝试解释我对它的理解,以了解我是否正确。
@DynamicUpdate(value=true)
仅更新实体modified values
Hibernate needs to track those changes
@SelectBeforeUpdate(value=true)
在select
之前创建update
以了解哪些属性已更改,这在实体已在不同会话上加载和更新时非常有用Hibernate is out of tracking entity changes
这2个肯定是否正确?
我主要担心的是。
DB performance
中的更好或更快一次更新实体中的所有字段或generate a select to know which columns update and update only the modified columns?
答案 0 :(得分:9)
情况取决于您的情况。如果你的表非常简单(没有外键约束,只有几列,几个索引),那么更新完整记录会更快。
但是,如果您的表具有许多外键约束和索引,则首先选择然后更新差异会更快。这是因为PostgreSQL必须为更新中的每一列执行以下工作:
此外,更改会增加表格的膨胀,必须通过真空清理。
请记住,如果在包含许多表的数据库上使用dynamicUpdate,并且您的更新看起来非常不同,那么您将开始逐出缓存的查询计划。这些计划耗费资源来计算新鲜度。但是,缓存计划可能只对同一会话中的后续查询有用。