Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 关闭entityManager的最佳方法_Java_Jpa_Entitymanager - Fatal编程技术网

Java 关闭entityManager的最佳方法

Java 关闭entityManager的最佳方法,java,jpa,entitymanager,Java,Jpa,Entitymanager,我有以下代码: 我正在处理控制器中的异常,但我想确保实体管理器已关闭。我不喜欢我接住并重新抛出错误。我希望能找到更好的建议 谢谢最好的办法就是不必在意它。如果您的实体管理器是容器管理的(例如,如果您使用的是ejb或spring,并且您没有强制执行特定的bean/应用程序管理行为),那么您应该让容器处理事务的打开/关闭,并且通常需要担心您的持久性上下文。它更容易、更安全,而且排除了非常特殊的情况,效果更好。只有在应用程序管理的上下文的情况下,才能直接手动关闭实体管理器,以避免连接池耗尽或其他问题

我有以下代码:

我正在处理控制器中的异常,但我想确保实体管理器已关闭。我不喜欢我接住并重新抛出错误。我希望能找到更好的建议


谢谢

最好的办法就是不必在意它。如果您的
实体管理器
容器管理的(例如,如果您使用的是
ejb
spring
,并且您没有强制执行特定的bean/应用程序管理行为),那么您应该让容器处理事务的打开/关闭,并且通常需要担心您的持久性上下文。它更容易、更安全,而且排除了非常特殊的情况,效果更好。只有在应用程序管理的上下文的情况下,才能直接手动关闭
实体管理器
,以避免连接池耗尽或其他问题。

只需删除捕获即可。如果关闭/打开entityManager,则可能无法使用entityManager提供的缓存和其他机制。但是,您可以只删除代码中的catch部分,并在其他地方引发的异常上放置某种类型的异常处理程序。如果我只删除catch,异常仍将传播到调用类?如果出现
finally
块,您可以尝试使用Java8-resource@vegaasen:您是否建议我打开
entityManager
?我应该为每个会话保留一个吗?使用Spring数据后,我现在明白了
    public Category findCategoryById(Long id) {
      EntityManager em = emf.createEntityManager();
      try {
          em.getTransaction().begin();
          Category category = categoryDAO.findCategoryById(em, id);
          em.getTransaction().commit();
          return category;
      } catch (Exception e) {
          throw e;
      } finally {
          em.close();
    }
  }