【发布时间】:2011-02-10 02:20:39
【问题描述】:
在“美好的 JDBC 时代”中,我编写了很多 SQL 代码,它们只对实际更改的“属性/成员”进行了非常有针对性的更新:
例如,考虑一个具有以下成员的对象:
public String name;
public String address;
public Date date;
如果仅在某些业务方法中更改了 date,我只会为 date 成员发出 SQL UPDATE。
然而,似乎(这是我对 Hibernate 的“印象”)在使用标准 Hibernate 映射(映射整个类)时,即使仅更新单个成员也会导致生成的 SQL 语句中的对象完全更新通过休眠。
我的问题是:
-
这个观察结果是否正确,Hibernate 没有智能地检查(在完全映射的类中),哪些成员发生了变化,然后只为特定的变化成员发布更新,而是总是会更新(在生成的 SQL 更新语句中)所有映射的成员(一个类的),即使它们没有被更改(如果对象由于一个成员变脏而变脏......)
如何使 Hibernate 只更新那些已更改的成员?我正在寻找一种解决方案,让 Hibernate 只更新实际更改的成员。
(我知道 Hibernate 在脏检查方面做了很多工作,但据我所知,这种脏检查仅与识别整个对象是否脏有关,而不是与单个成员脏有关。)
【问题讨论】: