我刚刚开始将自己的持久性框架迁移到JPA。
鉴于持久性框架隐藏了很多问题,我想知道是否不关闭EntityManagers会造成资源泄漏,或者框架是否会为我收集并关闭它们。
我打算在所有地方关闭它们,但是我必须关闭吗?
目前使用TopLink只是因为它可以轻松地与NetBeans一起使用,但是很高兴研究其他JPA提供程序。
Answers:
这取决于您如何获得它。
如果使用EntityManagerFactory创建它,则无论使用哪种框架,都必须将其关闭。
如果使用依赖注入(例如,使用EJB和@PersistenceContext批注)获得了它,则不应该手动关闭它(AFAIK会导致RuntimeException)。
你应该。
框架不知道您打算如何使用EM,因此它们无法将其关闭(除非在最终确定时,否则无法保证)。是的,不关闭它们会造成资源泄漏。
这个想法与“总是关闭java.sql.Connection”(尽管某些数据源具有通过不活动自动关闭它们的设置)或“总是关闭Hibernate会话”相同。
此外,如果您打算编写可移植的代码,则不应依赖“聪明”的特定JPA提供程序,否则其他人可能无法及时关闭EM。