所以我现在一直在使用Hibernate SessionFactory
及其getCurrentSession
方法处理事务。
Session session = sessionFactory.getCurrentSession();
让它与同一测试中的其他DAO类进行交互。但是,切换到JPA,我可以注入一个托管EntityManagerFactory
的容器,然后用
EntityManager entityManager = myFactory.createEntityManager();
然后在当前测试中继续作为EntityManager
中的会话接口等价物?执行entityManager.flush()
原因
javax.persistence.TransactionRequiredException: no transaction is in progress
答案 0 :(得分:1)
.flush()
来电必须是交易的一部分。您可以使用@Transactional
注释创建一个或从调用类传播。
创建:
entityManager.getTransaction().begin();
// Some DB operations
entityManager.flush();
entityManager.getTransaction().commit(); //commit() will do the flush anyway
如果您想成为调用类事务的一部分,那么根据设计在方法或类级别包含@Transactional
注释。