2013-01-18 15 views
5

Mam kod, który wygląda tak.Po użyciu metody odwijającej na właścicieymanager, aby uzyskać macierzystą sesję hibernacji, czy muszę zamknąć oba?

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

Ale wydaje mi się, że gdzieś mam wyciek połączenia. Zastanawiam się, czy mam zamknąć zarówno entityManager, jak i hibernateSession. Czy ktokolwiek pracował z tego typu sytuacją?

Odpowiedz

0

nie wiem o Hibernate, ale w EclipseLink mówią wyraźnie, że trzeba być w transakcji przed pobraniem połączenie poprzez rozpakowanie:

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

więc spróbuj tego:

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

Nie musisz zamykać zarówno Session, jak i EntityManger, pod maską EntityManger w hibernacji jest faktycznie sesja hibernacji. Wywołanie funkcji odrodzenia spowoduje przejście do sesji podstawowej. Więc zamknięcie jednego z nich jest w porządku.
Jeśli chodzi o wyciek połączenia, spójrz na moją odpowiedź na następujące question, może to ten sam problem.

Powiązane problemy