挿入後のイベントで新しいエンティティを作成するイベントリスナーを Hibernate 3 に実装しようとしています。
最初に試したコードは次のとおりです。
@Override
public void onPostInsert(PostInsertEvent event) {
if (event.getEntity() instanceof MyEntity) {
final MyEntity myEntity = (MyEntity) event.getEntity();
final OriginalCopy originalCopy = new OriginalCopy(myEntity);
event.getSession().persist(originalCopy);
}
}
ただし、ログを調べると、新しい MyEntity を永続化すると、次のようになると予想されます。
insert into original_entity values (...)
しかし、実際に行われるのは更新です。
update original_entity set ... where original_entity_id = ...
だから私はこのコードで運を試してみましたが、今では正しく動作しているようです:
@Override
public void onPostInsert(PostInsertEvent event) {
if (event.getEntity() instanceof MyEntity) {
final MyEntity myEntity = (MyEntity) event.getEntity();
final OriginalCopy originalCopy = new OriginalCopy(myEntity);
final SessionFactory sessionFactory = event.getSession().getSessionFactory();
final Session session = sessionFactory.openSession(event.getSession().connection());
final Transaction tx = session.beginTransaction();
session.persist(originalCopy);
tx.commit();
}
}
既存の接続を介して新しいセッションを作成して、それが機能していることを確認する必要がある理由を誰かに説明できますか?