2013-01-18 4 views
5

Ich habe Code, der so aussieht.Nach der Verwendung der Unwrap-Methode auf Entitymanager, um die native Hibernate-Sitzung zu bekommen, muss ich beide schließen?

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(); 
} 

Aber ich habe irgendwo eine Verbindung Leck. Ich frage mich, ob ich EntityManager und HibernateSession schließen soll. Hat jemand anders mit dieser Art von Situation gearbeitet?

Antwort

0

Ich weiß nicht, über Hibernate, aber in Eclipse sagen sie ausdrücklich, dass Sie in einer Transaktion sein müssen, bevor die Verbindung über unwrap Abrufen:

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

so versuchen, diese:

entityManager.getTransaction.begin(); 
this.hibernateSession = entityManager.unwrap(Session.class); 
... 
entityManager.getTransaction.commit(); 
3

Sie müssen nicht beide Sitzung und EntityManger schließen, unter der Haube EntityManger im Ruhezustand ist tatsächlich Sitzung im Winterschlaf. Wenn Sie Unwarp aufrufen, erhalten Sie die zugrunde liegende Sitzung. Also ist es gut, einen von ihnen zu schließen.
In Bezug auf die Verbindung Leck, schaue meine Antwort auf die folgenden question, vielleicht ist es das gleiche Problem.