2013-01-18 32 views
5

我有看起來像這樣的代碼。在entitymanager上使用unwrap方法獲取本機休眠會話後,我是否必須關閉兩者?

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。有沒有其他人與這種情況下工作?

回答

0

我不知道休眠模式,但在他們的EclipseLink明確說,你必須要在一個事務中檢索通過解包連接之前:

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

所以試試這個:

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

你不必關閉Session和EntityManger,在Hibernate中EntityManger實際上就是hibernate Session。調用unwarp會傳遞給你底層Session。所以關閉其中一個很好。
關於連接泄漏,看看我的回答以下question,也許這是同樣的問題。