SessionFactory.getCurrentSession()vs EntityManager.createEntityManager()

时间:2015-05-08 13:54:48

标签: java spring hibernate jpa junit

所以我现在一直在使用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

1 个答案:

答案 0 :(得分:1)

.flush()来电必须是交易的一部分。您可以使用@Transactional注释创建一个或从调用类传播。

创建:

entityManager.getTransaction().begin();

// Some DB operations

entityManager.flush();
entityManager.getTransaction().commit(); //commit() will do the flush anyway

如果您想成为调用类事务的一部分,那么根据设计在方法或类级别包含@Transactional注释。