在休眠状态下,如果您获得一个对象并尝试修改其中一个属性并提交事务。Hibernate 将新值与旧值进行比较。仅当至少一个属性的新值与旧值不同时,才为实体的所有持久属性发出 UPDATE 。
例子:
- 通过 id 查找 EntityA。Hibernate 为实体(以及任何非惰性多对一实体)发出 SELECT,它会记住原始值。
EntityA a = hibernateSession.find(EntityA.class, id);
- 在 entityA 上设置一些属性。
a.setPhone(newPhoneValue);
- 提交事务,触发
hibernateSession.flush().
Hibernate 将新值与旧值进行比较。如果 propertyB 的旧值和新值不同,则为 x 的所有持久属性发出 UPDATE。
发布如下更新:UPDATE entityA set phone=?, name=?, updateDate=? WHERE id=?
如果您愿意,可以在映射中使用动态更新和动态插入。
动态更新(可选 - 默认为 false):指定 UPDATE SQL 应在运行时生成,并且只能包含值已更改的那些列。
动态插入(可选 - 默认为 false):指定应在运行时生成 INSERT SQL,并且仅包含值不为空的列。
将 dynamic-update 设置为 true 休眠将发出UPDATE
没有name
列的 a,因为它没有更改。
UPDATE entityA set phone=?, updateDate=? WHERE id=?