hibernate 是否检查对象是否已实际更改,或者是否假设调用了 setter?

ino*_*nor 1 java hibernate

我将 Hibernate 与 Spring 框架一起使用,并遇到了Opportunistic Locking,所以我有一个基本问题:

Hibernate 是否会在调用 setter 时立即考虑对象“已更改/脏”,例如:theEmployee.setAge(32)因此,即使age32更改,它也会被视为“已更改”,或者 Hibernate 会发现即使调用了 setter,对象实际上没有改变?

换句话说,如果我想防止不必要的写入,是否有必要进行编码:

if (theEmployee.getAge() != age) { theEmployee.setAge(age); }
Run Code Online (Sandbox Code Playgroud)

...或者编码就足够了: theEmployee.setAge(age);

JB *_*zet 5

你可以很容易地测试这个。但答案是 Hibernate 测试对象的实际状态。如果对象状态与加载时相同,则不会执行任何更新查询。