spring4 hibernate5配置 getHibernateFlushMode is not valid without active transaction

最近在做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


一定静下心来看。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值