6

我有看起来像这样的代码。

 this.entityManager = AppFactory.instance().getEntityManagerFactory().createEntityManager();
 this.hibernateSession = entityManager.unwrap(Session.class);
 try{
 //do some queries using both entityManager and hibernateSession
 }finally{
 this.entityManager.close();
 }

但我似乎在某处有连接泄漏。我想知道我是否应该关闭 entityManager 和 hibernateSession。有没有其他人处理过这种情况?

4

2 回答 2

4

您不必同时关闭 Session 和 EntityManger,在 hibernate 中的 EntityManger 实际上是休眠 Session。调用 unwarp 会将基础会话传递给您。所以关闭其中一个就可以了。
关于连接泄漏,看我对下面问题的回答,可能是同一个问题。

于 2013-07-24T06:31:25.423 回答
1

我不了解 Hibernate,但在 EclipseLink 中,他们明确表示您必须先进行事务,然后才能通过展开检索连接:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/EMAPI#JPA_2.0

所以试试这个:

entityManager.getTransaction.begin();
this.hibernateSession = entityManager.unwrap(Session.class);
...
entityManager.getTransaction.commit();
于 2013-04-10T21:39:40.480 回答