我在大约1年时间里使用JPA作为数据库框架开发Java系统。
每次查询时,我都不关闭EntityManager,IMO理解是JPA在执行查询后自动关闭 EntityManager ,如
getSingleResult()或 getResultList()
如果没有那么垃圾收集会收集它来处置吗?
答案 0 :(得分:8)
应用程序管理的EntityManagers(通过调用emf.createEntityManager()
从EntityManagerFactory获得的那些)必须明确关闭。
编辑:您不必在每次查询后关闭EM,但在从创建它的方法返回之前,请确保关闭它。一种常见的方法是在try/catch/finally
块中嵌入EM,在em.close();
情况下调用finally
。
如果您在符合Java EE的容器中使用事务范围的EntityManager,则EntityManager在事务期间由容器创建,并在事务完成时关闭。