当我尝试以下列方式使用ThreadLocalSessionContext时:
Session hsession = HibernateUtils.getSession();
ThreadLocalSessionContext.bind(hsession);
// do stuff
hsession.close();
我为每一个Struts Action执行此操作。有什么我做错了,导致我得到以下错误?
[ThreadLocalSessionContext] Already session bound on call to bind(); make sure you clean up your sessions!
我检查了所有包含ThreadLocalSessionContext.bind的文件,并确保明确关闭这些会话。有没有办法监控会话绑定到会话工厂的时间?
谢谢!
答案 0 :(得分:0)
事实证明,虽然documentation表示“如果在此类管理的会话上调用close(),它将自动解除绑定。”它实际上不是自动的!
您必须明确调用ThreadLocalSessionContext.unbind(sessionFactory)
取消绑定会话。否则,即使会话关闭,它仍然会保持绑定到SessionFactory。