spring 配置事务拦截器到 调用2个插入方法的那一层

解决方案 »

  1.   

    用spring3吧,直接把拦截器配置到那个几个方法上,在配一下事物扩散,就可以了
      

  2.   


    <!-- spring 管理事务 -->  <bean id="myTxManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">  <property name="sessionFactory">  <ref bean="sessionFactory" />  </property>  </bean>  <!--  =======================advice======================================  -->  <tx:advice id="txAdvice" transaction-manager="myTxManager">  <!-- 声明事务规则 -->  <tx:attributes>  <tx:method name="find*" propagation="REQUIRED" read-only="false" />  <tx:method name="test*" propagation="REQUIRED"  rollback-for="Exception" />  <tx:method name="save*" propagation="REQUIRED"  rollback-for="Exception" />  <tx:method name="update*" propagation="REQUIRED"  rollback-for="Exception" />  <tx:method name="delete*" propagation="REQUIRED"  rollback-for="Exception" />  <tx:method name="reg*" propagation="REQUIRED" rollback-for="Exception" />  <tx:method name="*" propagation="SUPPORTS" read-only="false" />  </tx:attributes>  </tx:advice>  <!--  ============================aop=====================================  -->  <aop:config>  <!-- 定义切面 -->  <aop:pointcut id="oaServiceMethods"  expression="execution(* com.soft.struts2.serviceimpl.*.*(..))" />  <!-- 将事务通知和切面组合 -->  <aop:advisor advice-ref="txAdvice" pointcut-ref="oaServiceMethods" />  </aop:config>
    在Spring中类似这样的配置
      

  3.   

    上面贴的有问题 在发一下 <!--
    =======================sessionFactory=================================
    -->
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation" value="classpath:hibernate.cfg.xml">
    </property>
    </bean>
    <!--
    ========================TransactionManager============================
    -->
    <!-- spring 管理事务 -->
    <bean id="myTxManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean>
    <!--
    =======================advice======================================
    -->
    <tx:advice id="txAdvice" transaction-manager="myTxManager">
    <!-- 声明事务规则 -->
    <tx:attributes>
    <tx:method name="find*" propagation="REQUIRED" read-only="false" />
    <tx:method name="test*" propagation="REQUIRED"
    rollback-for="Exception" />
    <tx:method name="save*" propagation="REQUIRED"
    rollback-for="Exception" />
    <tx:method name="update*" propagation="REQUIRED"
    rollback-for="Exception" />
    <tx:method name="delete*" propagation="REQUIRED"
    rollback-for="Exception" />
    <tx:method name="reg*" propagation="REQUIRED" rollback-for="Exception" />
    <tx:method name="*" propagation="SUPPORTS" read-only="false" />
    </tx:attributes>
    </tx:advice>
    <!--
    ============================aop=====================================
    -->
    <aop:config>
    <!-- 定义切面 -->
    <aop:pointcut id="oaServiceMethods"
    expression="execution(* com.soft.struts2.serviceimpl.*.*(..))" />
    <!-- 将事务通知和切面组合 -->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="oaServiceMethods" />
    </aop:config>
      

  4.   

    楼上的楼主提的是mybatis不是hibernate
      

  5.   

    7楼说的对... hibernate的配置.楼主搞错了
      

  6.   

    正解。。 我也遇到过和楼主相同问题 解决方案
    在你的业务层加上注解 @Transactional(rollbackFor=Exception.class)就可以了回滚了
      

  7.   

    发现很多人不理解什么是事务...
    请把事务配置在service层,也就是dao的调用者上
      

  8.   

    http://blog.csdn.net/will_awoke/article/details/12002705
    其实真正的问题在于spring 和springmvc 分父子容器,ContextLoaderListener才会给@Service加上事务,而springmvc 只是生成普通的bean