Spring3+Hibernate4注解式事务中无法获取Session的问题

在Spring3+Hibernate4的整合中,使用SessionFactory.getCurrentSession()获取Session时出现'Could not obtain transaction-synchronized Session for current thread'错误。问题源于注解式事务管理器与Service、Dao层注册不一致。解决方案是将事务管理器配置放入DispatcherServlet指定的xml文件,如spring/appServlet/servlet-context.xml,确保与Service、Dao一起被注册,从而使注解式事务管理生效。
摘要由CSDN通过智能技术生成

  Hibernate3以后,建议使用SessionFactory.getCurrentSession()的方式来创建Session并绑定到ThreadLocalSessionContext.
  在集成Spring时,Spring通过org.springframework.orm.hibernate4.SpringSessionContext来管理Session,具体来说Spring要通过事务管理器将Session绑定到SpringSessionContext上。由于目前的Spring的事务管理主要使用注解式事务,所以我也是采用这种方式来注册和使用事务管理器的。但是在调用SessionFactory.getCurrentSession()时一直报错:Could not obtain transaction-synchronized Session for current thread。帖子中给出的建议往往是检查配置文件中配置有没有齐全。然而我确定自己的配置是全的。
  后来根据一个帖子的建议使用了Opensessioninviewfilter。这个时候确实可以得到Session了,但是在增删改时却没有办法自动提交事务,Sesssion缓存无法同步到数据库,而需要手动进行Session.flush()操作来清理一级缓存,同时事务管理器也没有起作用了。后来查看了一些资料,大概了解了这个Filter的原理是在Request发起时自动为这个Request维持了一个Session,所以在getCurrentSession时是可以得到Session的。虽然可以得到Session,但是配置的事务管理器却依然没有起作用,这没有达到使用事务的目的。
  这个问题最后是在一个不起眼的回帖中找到了解决方案,原贴如下:https://www.oschina.net/question/27371

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值