问题在这个帖子中,是关于getCurrnetSession与OpenviewFilter看似矛盾的地方,具体看下面的帖子:
http://bbs.csdn.net/topics/390475237?page=1#post-394642915
可以更好的解释了:看源代码:
public final Session currentSession() throws HibernateException {
//从线程局部量context中尝试取出已经绑定到线程的Session
Session current = existingSession( factory );
//如果没有绑定到线程的Session
if (current == null) {
//打开一个”事务提交后自动关闭”的Session
current = buildOrObtainSession();
current.getTransaction().registerSynchronization(buildCleanupSynch() );
// wrap the session in thetransaction-protection proxy
if ( needsWrapping( current ) ) {
current = wrap( current );
}
//将得到的Session绑定到线程中:即以<SessionFactory,Session>键值对方式设置到线程局部量context
doBind( current, factory );
}
return current;
}
我觉得是这样,只有当前session为null时才会去创建“事务提交后自动关闭”的Session,而使用了OpenSessionInViewFilter的session在当前请求范围内不会为null