一尘不染

Hibernate:脏检查并且仅更新脏属性?

hibernate

在“旧的JDBC美好时光”中,我编写了许多SQL代码,这些代码仅针对实际上已更改的“属性/成员”进行了针对性的更新:

例如,考虑具有以下成员的对象:

public String name;
public String address;
public Date date;

如果仅date在某些业务方法中进行了更改,我将只UPDATE为该date成员发出一个SQL 。

但是,似乎(这是我对Hibernate的“印象”)在使用标准Hibernate映射(映射完整类)时,即使仅单个成员的更新也会导致Hibernate生成的SQL语句中对象的完整更新。

我的问题是:

  1. 这种观察是正确的吗,Hibernate 不会 智能地检查(在完全映射的类中)更改了哪些成员,然后仅针对特定的已更改成员发布更新,而是始终会进行更新(在生成的SQL Update语句中)所有(类的)映射成员,即使它们没有更改(如果对象由于一个成员变脏而变脏了……)

  2. 如何使Hibernate仅更新已更改的那些成员?我正在寻找一种让Hibernate仅更新实际更改的成员的解决方案。

(我知道Hibernate在脏检查方面做了很多工作,但是据我所知,这种脏检查仅与确定对象整体是否脏有关,而不是单个成员是否脏。)


阅读 189

收藏
2020-06-20

共1个答案

一尘不染

其实,你可以指定的选项dynamic-update,并dynamic- insert在类的映射。它就是这样做的。更多信息在这里

2020-06-20