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();
ちなみに、気になるトリガーはありません。
この例は非常に単純で、パフォーマンスの問題は些細なことのように思えるかもしれませんが、実際には、より複雑なオブジェクト (つまり、複数の挿入と更新) と大量のオブジェクトを扱っているため、更新を回避することは素晴らしいことです。