最近在做spring4和hibernate5的整合
不小心出了这个错误,是因为我不小心配置了:
hibernate.current_session_context_class = thread 导致的,这使我好好学习了一把
如果是单独使用hibernate,那么自然设置最好,因为这会使得hibernate能够从本地线程中getCurrentSession得到同一个session会话
但是spring和hibernate集成的时候,就不能这样设置了
在Spring @Transactional声明式事务管理,”currentSession”的定义为: 当前被 Spring事务管理器 管理的Session
事务管理已经交给了spring去控制,那么current_session_context当前会话上下文就应该交给spring的这个类:SpringSessionContext(当然这个也是spring 的默认配置)
如果在集成spring和hibernate的时候设置为thread,会导致hibernate使用org.hibernate.context.internal.ThreadLocalSessionContext
结果就是,调用hibernate的session做增删改操作的时候,spring找不到当前应用上下文中有效的transaction
另外,再附上某位大神的深度解释,深入源码,值得仔细看看,了解hibernate对session context的控制和spring对此的实现机制!
http://blog.csdn.net/naruto_Mr/article/details/48085191
一定静下心来看。。。。。。