关于spring3中No Session found for current thread!and Transaction的配置和管理

2014-11-24 10:14:24 · 作者: · 浏览: 0

今天我是特别的郁闷,本来项目做到一半,以前都好好的,结果下午就出现问题,苦逼的到现在才解决。它出现问题的时候都一声不坑,,(天啦,现在才发现CSDN啥时候把QQ表情给整过来了)就在注册用户的时候,咦,后台发现咋SQL语句特么的不对劲,仔细一看数据根本就没有送到数据库去,只是简单的执行了一下查询操作,当时我就震惊了。首先就去看了Action是否没有写save方法,结果是没有任何错误。后来我再去再其他业务层是否也出现了问题,结果都能正常操作,让我哭笑不得。后来只能查配置。当时我就看到这两个配置是在项目中同时出现的,天啦,我在惊叹,项目以前是怎么运行起来的。

[html]
thread

thread

[html]
org.springframework.orm.hibernate4.SpringSessionContext

org.springframework.orm.hibernate4.SpringSessionContext
这两个配置在最新的spring3.1.1和hibernate中4.1.3中都是多余的,

那是因为在Spring事务管理中,current Session是绑定到SpringSessionContext中的,而不是ThreadLocalSessionContext中的

而我的事务特性也是在spring配置了的,hibernate也交由了spring管理。spring真是个大管家啊,

[html]











































































在以上的很多实验中出现了怪多的异常:

org.hibernate.HibernateException: No Session found for current thread

因为我在项目中一直都是作用的getCurrentSession,也没有在业务方法中进行事务管理,出现上面这个错误的原因就是在使用getCurrentSession的时候找不到相应的事务,所以No session就出来了,记住,并不是因为

[html]
thread

thread这个配置,所以一定要配置好事务管理。

在后面还出现了类似的:

org.hibernate.HibernateException: save is not valid without active transacti

只要把上面的问题解决了这个问题也解决了,

总结:使用最新的spring和hibernate记住干掉上面那两个配置和配置正确相应的Transaction。

很晚了,该洗洗睡了。