每次查询都需要关闭实体经理吗?

时间:2014-09-10 10:37:41

标签: java hibernate jpa

我在大约1年时间里使用JPA作为数据库框架开发Java系统。

每次查询时,我都不关闭EntityManager,IMO理解是JPA在执行查询后自动关闭 EntityManager ,如

  

getSingleResult() getResultList()

如果没有那么垃圾收集会收集它来处置吗?

1 个答案:

答案 0 :(得分:8)

应用程序管理的EntityManagers(通过调用emf.createEntityManager()从EntityManagerFactory获得的那些)必须明确关闭。

编辑:您不必在每次查询后关闭EM,但在从创建它的方法返回之前,请确保关闭它。一种常见的方法是在try/catch/finally块中嵌入EM,在em.close();情况下调用finally

如果您在符合Java EE的容器中使用事务范围的EntityManager,则EntityManager在事务期间由容器创建,并在事务完成时关闭。