2009-04-03 4 views
0

Wenn ich versuche, die ThreadLocalSessionContext auf folgende Weise zu verwenden:Hibernate: ThreadLocalSessionContext: Bereits Sitzung auf Abruf gebunden zu binden()

Session hsession = HibernateUtils.getSession(); 
ThreadLocalSessionContext.bind(hsession); 
// do stuff 
hsession.close(); 

Ich tue dies für jede einzelne Struts Aktion. Gibt es etwas, das ich falsch mache, wodurch ich den folgenden Fehler erhalte?

[ThreadLocalSessionContext] Already session bound on call to bind(); make sure you clean up your sessions! 

Ich habe alle meine Dateien, die ThreadLocalSessionContext.bind in ihnen hatten und sorgte dafür, dass diese Sitzungen explizit geschlossen werden. Gibt es eine Möglichkeit zu überwachen, wann Sitzungen in Sitzungsfabriken eingebunden werden?

Danke !!

Antwort

0

Wie sich herausstellt, obwohl die documentation zeigt, dass "Wenn close() für eine Sitzung von dieser Klasse verwaltet wird, wird es automatisch ungebunden." Es ist eigentlich NICHT automatisch!

Sie müssen explizit ThreadLocalSessionContext.unbind(sessionFactory) aufrufen, um die Sitzung zu lösen. Andernfalls bleibt es auch dann, wenn eine Sitzung geschlossen wird, an die SessionFactory gebunden.

Verwandte Themen