原文请看:https://blog.csdn.net/zsh2050/article/details/51088229
最近在学习ssh项目整合,使用spring3和hibernate4组合在一起使用,结果项目启动,去页面展示的时候,突然报了如下错误,

实在是令人很不解,为什么会获取不到session呢,明明该配置的都配置了(当时忘记查看事务配置了,因为是导进去的),于是上网查询了一下,发现竟然是service层的实现类里忘记加@Transactional注解了,于是便马上添加了:

又马上开始了测试,发现还是报No Session found for current Thread,我便开启了第二种方法,即在hibernate的配置文件中添加:current_session_context_class属性为Thread(帖子说保险起见),甚是喜悦的又进行了一番测试,额,结果可想而知,还是铩羽而归了,但是却报了一个新的错误,如下:

但是总归来说原来的错还是没有解决,而且还报了新错,看来是不需要在hibernate中添加current_session_context_class属性为Thread了,因为Spring提供了自己的CurrentSessionContext实现,如果我们不打算使用Spring,而是自己直接从hibernate.cfg.xml创建SessionFactory,并且为在hibernate.cfg.xml中设置current_session_context_class为thread,也即使用了ThreadLocalSessionContext,那么我们在调用getCurrentSession()时,如果当前线程没有Session存在,则会创建一个绑定到当前线程。
我又重新思索了一番,最后落足与spring的配置文件里找线索,看了上面的原文说到要在spring中配置事务管理TransactionManager,然后和@Transaction注解一起使用,最后发现竟然是事务驱动被注释了,欲哭无泪啊

因为粗心,经历了一番波折,但终究还是解决了!!
浙公网安备 33010602011771号