假如我有个action方法中的操作是有多个service对多个表进行crud,前面的操作成功,后面报异常后能回滚吗?应该怎么作呢?

解决方案 »

  1.   

    你的这个需要把这些操作都放到service层的一个方法里边(你的事务处理层),那样才能回滚。
      

  2.   

    事务配置的时候,管理的方法是action的吗?如果是就可以
      

  3.   


    我的app事务配置
    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">   
            <!--  事务拦截器bean需要依赖注入一个事务管理器 -->   
            <property name="transactionManager">   
                <ref local="transactionManager"/>   
            </property>   
            <property name="transactionAttributes">   
                <!--  下面定义事务传播属性-->   
                <props>   
                    <prop key="insert*">PROPAGATION_REQUIRED</prop>   
                    <prop key="update*">PROPAGATION_REQUIRED</prop>   
                    <prop key="save*">PROPAGATION_REQUIRED</prop>   
                    <prop key="add*">PROPAGATION_REQUIRED</prop>   
                    <prop key="update*">PROPAGATION_REQUIRED</prop>   
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>   
                    <prop key="delete*">PROPAGATION_REQUIRED</prop>   
                    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>   
                    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>   
                    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>   
                    <prop key="change*">PROPAGATION_REQUIRED</prop>   
                    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>   
                </props>   
            </property>   
        </bean>
        
        <!-- 定义自动代理BeanNameAutoProxyCreator -->   
        <bean id="beanNameAutoProxyCreator"  
            class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   
            <!--  指定对满足哪些bean name的bean自动生成业务代理 -->   
                <property name="beanNames">   
                  <list>   
                    <value>*Service</value>   
                  </list>   
                </property>   
            <!--  下面定义BeanNameAutoProxyCreator所需的事务拦截器-->   
            <property name="interceptorNames">   
                <list>   
                    <!-- 此处可增加其他新的Interceptor -->   
                    <value>transactionInterceptor</value>   
                </list>   
            </property>   
            </bean> 
      

  4.   

    <!--  指定对满足哪些bean name的bean自动生成业务代理 -->  
                <property name="beanNames">  
                  <list>  
                    <value>*Service </value>  
                  </list>  
                </property>  那你的action都是定义为以Service 结尾的吗?
    并且需要管理的方法名称存在匹配这些吗? <prop key="insert*">PROPAGATION_REQUIRED </prop>  
                    <prop key="update*">PROPAGATION_REQUIRED </prop>  
                    <prop key="save*">PROPAGATION_REQUIRED </prop>  
                    <prop key="add*">PROPAGATION_REQUIRED </prop>  
                    <prop key="update*">PROPAGATION_REQUIRED </prop>  
                    <prop key="remove*">PROPAGATION_REQUIRED </prop>  
                    <prop key="delete*">PROPAGATION_REQUIRED </prop>  
                    <prop key="get*">PROPAGATION_REQUIRED,readOnly </prop>  
                    <prop key="find*">PROPAGATION_REQUIRED,readOnly </prop>  
                    <prop key="load*">PROPAGATION_REQUIRED,readOnly </prop>  
                    <prop key="change*">PROPAGATION_REQUIRED </prop>  
                    <prop key="*">PROPAGATION_REQUIRED,readOnly </prop>  
      

  5.   


    这是service层,一般事务开始不都在这里么?
      

  6.   

    矛盾,既然拟配置的事物是管理service的方法,那怎么保证你的多个service的事物完整性,拟这样的配置仅能保证在一个service中某个方法中的多个数据块操作事物的完整性,如果需要多个service的方法完整,拟只有写一个service的方法来调用这些service的方法啦
      

  7.   

    如果需要多个service的方法完整,拟只有写一个service的方法来调用这些service的方法啦?写错啦
    只有写一个service的方法来调用这些service的方法所调用的dao层的方法。