为什么在JPA Hibernate中更新查询;所有属性都在SQL中得到更新

为什么在JPA Hibernate中更新查询;所有属性都在SQL中得到更新,sql,hibernate,jpa,Sql,Hibernate,Jpa,我将JPA与Hibernate一起使用。当我修改对象的一个属性并更新它时;生成的SQL显示所有正在更新的列!为什么它不只更新修改过的列?有没有一种方法可以实现这一点,因为我觉得这将更加优化。默认情况下,hibernate包含更新查询中的所有字段。如果要排除此项,请使用自定义更新HQL或将hibernate配置为排除更新查询中未修改的字段 这是通过在类映射中添加dynamic update=“true”实现的 <class ... table="your_table" .... dynami

我将JPA与Hibernate一起使用。当我修改对象的一个属性并更新它时;生成的SQL显示所有正在更新的列!为什么它不只更新修改过的列?有没有一种方法可以实现这一点,因为我觉得这将更加优化。

默认情况下,hibernate包含更新查询中的所有字段。如果要排除此项,请使用自定义更新HQL或将hibernate配置为排除更新查询中未修改的字段

这是通过在类映射中添加
dynamic update=“true”
实现的

<class ... table="your_table" .... dynamic-update="true">

它是特定于hibernate的注释,在JPA中不可用。这里有一个很好的链接,可以链接到详细信息

在过去的4-5天里,我遇到了一个问题,这个问题慢慢地让我发疯

删除操作使用的是所有列,而不仅仅是主键列

例如

当我删除“dynamicUpdate=true”注释时,Hibernate开始生成正确的SQL,即

DELETE FROM MYTABLE WHERE ID=?

VALUE
是CLOB时,它在Oracle11g上引起了严重的问题。

当仅使用hibernate时,这种方法可以很好地工作。但是我使用的是JPA,因此我只使用persistence.xml而不是hibernate.properties。我在persistence.xml中声明了我的所有实体,比如com.kids.domain.Child,但在那里我无法使用它flag@Deepak:很抱歉延迟,我已经用详细信息更新了答案。我想知道为什么Hibernate团队默认选择更新所有列
DELETE FROM MYTABLE WHERE ID=? AND NAME=? AND VALUE=?
DELETE FROM MYTABLE WHERE ID=?