【发布时间】:2015-06-05 21:27:11
【问题描述】:
我目前正在开发一个带有内存 derby 数据库的小型应用程序。我正在使用 Hibernate 4.3.10 和 JPA 2。这是我的小型演示应用程序的链接:http://1drv.ms/1KfCiHK
此短代码导致“java.sql.SQLException:无法在事务仍处于活动状态时关闭连接。”
EntityManagerFactory emf = Persistence.createEntityManagerFactory(null);
EntityManager em = emf.createEntityManager();
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyEntity> query = cb.createQuery(MyEntity.class);
em.createQuery(query.select(query.from(MyEntity.class))).getResultList();
em.close();
emf.close(); // Here the exception is raised!
所以,即使我不需要任何交易并且没有启动一项,也有什么事情启动了?!
如果我用这个替换三个查询行
em.createQuery("select m from MyEntity m", MyEntity.class).getResultList();
那么没有引发异常,尽管它正在做同样的事情!
是我做错了什么,还是这是我们想要的行为?
【问题讨论】:
-
我已经测试了您的示例,但 JPQL 和 CriteriaQuery 都出现错误“无法关闭连接,而事务仍处于活动状态”。
-
嗯,你是对的,我一定是盲人什么的......不过我的问题仍然存在:为什么会引发异常?我没有开始交易。
em.getTransaction().isActive()也返回 false。那么,我的错在哪里?还是 Hibernate/Derby 中的某个错误?