首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我必须关闭()每个EntityManager吗?

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

Stack Overflow用户
提问于 2008-10-21 00:08:20
回答 3查看 59.3K关注 0票数 76

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

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

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

目前使用TopLink,只是因为它可以很容易地与NetBeans一起工作,但我很乐意研究其他的JPA提供商。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-10-21 08:23:10

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

如果它是使用EntityManagerFactory创建的,那么无论您使用什么框架,都必须将其关闭。

如果你使用依赖注入(例如使用EJB和@PersistenceContext注解)获得它,你不应该手动关闭它(AFAIK它会导致RuntimeException)。

票数 92
EN

Stack Overflow用户

发布于 2008-10-21 01:31:58

你应该这样做。

框架不知道您打算如何使用EM,所以它们不能关闭它(除非是在最终完成时,这是不能保证的)。是的,不关闭它们会造成资源泄漏。

这个想法与"always close java.sql.Connection“(尽管有些数据源有通过不活动自动关闭它们的设置)或"always close Hibernate session”是一样的。

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

票数 12
EN

Stack Overflow用户

发布于 2012-09-18 17:42:00

我在我的存储库中使用@PersistenceContext注释获得了EntityManager。我可以看到,当连接池到达它的maxPoolSize时,它并没有被清理。

但是,如果我使用EntityManagerFactory创建EntityManager并调用entitymanager.close(),那么连接将被清理。我使用c3p0作为连接池库。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/220374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档