我在尝试测试注册为 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
并手动提交事务,但这导致了异常。
测试这些的适当策略是什么?