2013-01-18 21 views
5

Buna benzeyen bir kod var.Yerel hazırda bekleme oturumunu almak için entitymanager üzerindeki unwrap yöntemini kullandıktan sonra her ikisini de kapatmak zorunda mıyım?

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

Ama bir yerde bir bağlantı sızıntısı var gibi görünüyor. Ben entityManager ve hibernateSession hem kapatmak için varsayalım merak ediyorum. Bu tür bir durumla çalışan başka biri var mı?

cevap

0

Ben hazırda bilmem ama EclipseLink onlar ambalajından aracılığıyla bağlantı almadan önce herhangi bir işlemde olması gerektiğini özellikle de ki:

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

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

yüzden bu deneyin

3

Hem Oturum hem de EntityManger öğelerini kapatmak zorunda değilsiniz, hazırda beklemede olan EntityManger kaputunun altında aslında oturum yanmıyor. Unwarp çağrısı altta yatan Seansı geçirecek. Yani bunlardan birini kapatmak iyi.
Bağlantı sızıntısı ile ilgili olarak, aşağıdaki yanıtı aşağıdaki question'a bakın, belki de aynı sorun olabilir.

İlgili konular