Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否每个查询都需要关闭实体管理器?_Java_Hibernate_Jpa - Fatal编程技术网

Java 是否每个查询都需要关闭实体管理器?

Java 是否每个查询都需要关闭实体管理器?,java,hibernate,jpa,Java,Hibernate,Jpa,我将在1年内使用JPA作为数据库框架用Java开发系统 每次我查询时,我都不会关闭EntityManager,我的理解是JPA在执行以下查询后会自动关闭EntityManager getSingleResult()或getResultList() 如果没有,垃圾收集是否将收集它以进行处置?应用程序管理的EntityManager(通过调用emf.createEntityManager()从EntityManager工厂获得的那些)必须显式关闭 编辑:您不必在每次查询后关闭EM,但请确保在从创建

我将在1年内使用JPA作为数据库框架用Java开发系统

每次我查询时,我都不会关闭EntityManager,我的理解是JPA在执行以下查询后会自动关闭EntityManager

getSingleResult()或getResultList()


如果没有,垃圾收集是否将收集它以进行处置?

应用程序管理的EntityManager(通过调用
emf.createEntityManager()
从EntityManager工厂获得的那些)必须显式关闭

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


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

因此,通过调用createEntityManager,EntityManager需要显式关闭。还有一个问题,使用
事务范围的EntityManager是什么意思?使用JBoss或GlassFish等JavaEE容器时,事务范围的EntityManager是默认的。它们的优点是,您不必关心它们的生命周期——只需请求一个实例并使用它。很好地解释了这种差异。如果我们不关闭entityManager会有什么后果?在java ee应用程序中,是否有方法检测未关闭的实体管理器?未关闭的EM是一种资源泄漏。在具有事务范围EMs的EE应用程序中,实现保证关闭EMs,因此不需要检测未关闭的EMs。