我在Hibernate中使用JPA。当我修改一个对象的一个属性并更新它时;生成的SQL显示所有列正在更新!为什么不只更新已修改的列?有没有一种方法可以实现这一目标,因为我认为它将得到更好的优化。
默认情况下,休眠包含更新查询中的所有字段。如果要排除此错误,请使用 自定义更新HQL ,也可以配置hibernate以 在更新查询中排除未修改的字段, 如本文所述。
这是通过添加dynamic-update="true"类映射来完成的。
dynamic-update="true"
<class ... table="your_table" .... dynamic-update="true">
在具有许多列的大型表中(旧式设计)或包含大量数据,这将对系统性能产生重大影响。它可以有一些性能影响,告诉这里。因此,在实施代码之前,请先评估其性能。
在此处阅读API ,以获取更多信息。
如果您使用的是注释,
@org.hibernate.annotations.Entity(selectBeforeUpdate=true)
它是特定于休眠的注释,在JPA中不可用。这是一篇链接到详细信息的好文章。