我想知道如何使用我的 Hibernate (4) 和 Oracle 设置来减少 SQL 更新。
一个简单的例子可能是这样的:
打开一个会话/事务,使用 session.save() 创建一个新实体 Xyz,处理一些业务逻辑,对 Xyz 进行一些更改并调用 session.update(),然后让会话正常关闭并休眠并提交到 DB。
提交时,Hibernate 会先插入,然后再进行更新——但在本例中,它真正需要做的只是一次插入,但要使用 Xyz 的最新属性。
有没有人有任何想法/模式来做这种事情?或者有什么办法可以改变 Hibernate 的行为吗?或者你对此有什么看法——它是一个完整的反模式吗?
我知道 Hibernate 足够聪明,可以忽略多个更新,当一个更新只是覆盖另一个更新时——那么为什么插入不相似呢?
这个小片段可以重现“问题”:
MyEntity e = new MyEntity("xxx");
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(e); e.setName("yyy");
session.getTransaction().commit();
session.close();
顺便说一句,我不用担心触发因素。
这个例子非常简单,性能问题可能看起来微不足道,但实际上我正在处理一个更复杂的对象(即多次插入和更新)和大量数据,因此避免更新会很好。