文章目录

今天在做一个小项目时用到了hibernate4和spring mvc 4.x,在做整合时一切都比较顺利,但是在测试hibernate插入数据时抛出了个异常

1
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread

查了相关资料发现是事务配置有问题,我一般比较习惯用声明式注解,所以就用了来配置了,调试了半天还是一样的错
误,实在是找不到错误在哪里,最后我用注解的方式开启了事务管理(@EnableTransactionManagement),一切正常,看来真是事务的问题,实在是不知道哪里错了,就看了下官方的文档,发现这两种开启事务的方式的作用域范围。

@EnableTransactionManagement 和 tx:annotation-driven只查找在同一个application context中bean上面查找@Transactional,也就是说在采用注解开启事务管理里和Transactional在同一上下文当中,而在xml配置的时候把加载的顺序搞反了,正常的顺序应该是扫包完成bean的注册之后,tx:annotation-driven才会在spring注册的bean里面扫描@Transactional注解,而我恰恰把顺序给弄反了。

正确地方式应该像这样:

1
2
3
<context:annotation-config/>
<context:component-scan base-package=""/>
<tx:annotation-driven />

###参考链接
[1] : http://forum.spring.io/forum/spring-projects/web/80895-why-tx-annotation-driven-doesn-t-work-in-my-service-configuration-file

文章目录