2009-04-03 5 views
0

Когда я пытаюсь использовать ThreadLocalSessionContext следующим образом:Hibernate: ThreadLocalSessionContext: Уже сеанс связан по вызову, чтобы связать()

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

Я делаю это для каждого Struts действий. Есть ли что-то, что я делаю неправильно, заставляя меня получить следующую ошибку?

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

Я проверил все мои файлы, которые имели ThreadLocalSessionContext.bind в них и убедились, что эти сессии явно закрыты. Есть ли способ контролировать, когда сеансы привязаны к сессионным фабрикам?

Спасибо!

ответ

0

Как оказалось, хотя documentation указывает, что «Если вызов close() вызывается в сеансе, управляемом этим классом, он будет автоматически отключен». Это на самом деле НЕ автоматическое!

Вы должны явно позвонить ThreadLocalSessionContext.unbind(sessionFactory), чтобы отвязать сеанс. В противном случае, даже если сеанс закрывается, он по-прежнему привязывается к SessionFactory.