1. 程式人生 > >mybatis non transactional SqlSession的解決

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後面的表示式有問題,這個要注意。