mybatis non transactional SqlSession的解決
這個問題有兩種解決方案:第一種是通過給方法加上@Transactional註解並且給配置中加入事務掃描<tx:annotation-driven transaction-manager="transactionManager"/>
第二種是通過配置來實現事務的同步。例如:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"/>
</bean>
<!-- - - - - - - spring 事務屬性 - - - - - - - -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" read-only="false"
rollback-for="Exception" no-rollback-for="RuntimeException"/>
<tx:method name="insert*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.RuntimeException" />
<tx:method name="update*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception" />
<tx:method name="select*" propagation="SUPPORTS"/>
<tx:method name="save*" propagation="REQUIRED" read-only="false" rollback-for="Exception" />
<tx:method name="remove*" propagation="REQUIRED" read-only="false" rollback-for="Exception" />
<tx:method name="add*" propagation="REQUIRED" read-only="false" rollback-for="Exception" />
<tx:method name="up*" propagation="REQUIRED" read-only="false" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<!--****** 織入,請修改成實際的業務層包名 *********-->
<aop:config>
<aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.ha.service.*.*(..))"/>
</aop:config>
這種方式,出問題的位置在於 <aop:advisor advice-ref="transactionAdvice" pointcut="execution(* com.ha.service.*.*(..))"/>這句話,主要在於pointcut後面的表示式有問題,這個要注意。