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