我必须关闭()每个 EntityManager 吗?

新手上路,请多包涵

我刚刚开始将我自己开发的持久性框架迁移到 JPA。

鉴于持久性框架隐藏了很多管道,我很想知道不关闭 EntityManagers 是否会造成资源泄漏,或者框架是否会为我收集并关闭它们。

我打算在所有地方关闭它们,但我必须这样做吗?

目前使用 TopLink,只是因为它可以轻松地与 NetBeans 一起使用,但我很乐意调查其他 JPA 提供商。

原文由 stevemac 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 542
2 个回答

这取决于你是如何获得它的。

如果您使用 EntityManagerFactory 创建它,则无论您使用什么框架,都必须关闭它。

如果您使用依赖注入(例如使用 EJB 和@PersistenceContext 注释)获得它,您不应该手动关闭它(据我所知,它会导致 RuntimeException)。

原文由 jb. 发布,翻译遵循 CC BY-SA 2.5 许可协议

你应该。

框架不知道您打算如何使用 EM,因此它们无法关闭它(除了,可能是在完成时,这不能保证)。是的,不关闭它们会造成资源泄漏。

这个想法与“始终关闭 java.sql.Connection”(尽管某些数据源具有通过不活动自动关闭它们的设置)或“始终关闭 Hibernate 会话”相同。

此外,如果您打算编写可移植代码,则不应依赖特定的 JPA 提供程序“很聪明”——其他提供程序可能无法及时关闭 EM。

原文由 Vladimir Dyuzhev 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题