として登録されている JPA エンティティ ライフサイクル オブザーバーをテストしようとしているときに問題が発生しました。POST_COMMIT_INSERT
私のオブザーバーは Spring Bean であるため、次のようにエンティティ マネージャーに接続します。
private void configureHibernateHooks(HistoricEventListener<?> listener) {
SessionFactory sessionFactory = getSessionFactory();
EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(
EventListenerRegistry.class);
if (listener instanceof PostInsertEventListener)
{
registry.getEventListenerGroup(EventType.POST_COMMIT_INSERT).appendListener((PostInsertEventListener) listener);
}
}
SessionFactory getSessionFactory() {
Session session = (Session) entityManager.getDelegate();
SessionFactory sessionFactory = session.getSessionFactory();
return sessionFactory;
}
私のテストには注釈が付けられてい@Transactional
ます。したがって、私が理解しているように、各テストは独自のトランザクション内で実行されます。テスト中にトランザクションがコミットされないため、オブザーバー メソッドが呼び出されないため、POST_COMMIT_XXX
リスナーが監視されません。
EntityManager
トランザクションを注入して手動でコミットしようとしましたが、例外が発生しました。
これらをテストするための適切な戦略は何ですか?