您的位置:首页 > 大数据 > 人工智能

Could not obtain transaction-synchronized Session for current thread

2015-10-26 17:01 501 查看
用Junit做单元测试时,报了这个错:Could not obtain transaction-synchronized Session for current thread

原因是没有为组件加入事务控制

解决的方法有两种

1.使用注解的方式

在spring-context.xml文件中加入<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />,

然后在@service组件或者@Repository组件中加入@Transactional注解,spring就会自动为@Transactional注解的类定义事务

2.利用spring的aop面向切面的功能实现事务的传播

在spring-context.xml文件中加入如下配置:

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="set*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
<tx:method name="find*" read-only="true" propagation="NOT_SUPPORTED"/>
<tx:method name="query*" read-only="true" propagation="NOT_SUPPORTED"/>
<tx:method name="select*" read-only="true" propagation="NOT_SUPPORTED"/>

<tx:method name="*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="txNeed" expression="<span style="color:#FF0000;">execution(* com.watson.web.service..*.*(..))</span>"/>
<aop:advisor pointcut-ref="txNeed" advice-ref="txAdvice"/>
</aop:config>

红色部分为定义通知织入的横切面,也就是横切点,会扫描service包下面的(包括子包)所有类的所有方法,为扫描到的方法织入事务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: