<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
        <ref local="dataSource" />
    </property>
</bean>

<!-- 事务代理拦截器的配置 -->
<bean id="baseTransactionProxy" abstract="true"
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
        <ref bean="transactionManager" />
    </property>
    <property name="transactionAttributes">
      <props>
        <prop key="insert*">PROPAGATION_REQUIRED</prop>
        <prop key="update*">PROPAGATION_REQUIRED</prop>
        <prop key="delete*">PROPAGATION_REQUIRED</prop>
        <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
      </props>
    </property>
</bean>在普通的java项目中通过main方法自行写了个批量添加操作,其中一个操作出现异常,事务回滚,可是在java web项目中当出现异常,未出现异常的操作却更新了数据表,请帮忙解决一下这个问题,谢谢各位同仁!

解决方案 »

  1.   

    呵呵,你的事务管理器用错了。 你那个是ibatis或者jdbc的!
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean>
      

  2.   

    还有,你的拦截器配置也偏老了。用我的吧。
    <tx:advice id="txAdvice">  
        <tx:attributes>  
            <tx:method name="find*" read-only="true"/>  
            <tx:method name="*" propagation="REQUIRED"/>  
        </tx:attributes>  
    </tx:advice>  
      
    <aop:config>  
        <aop:pointcut expression="execution(* *..dao.impl..*(..))" id="dao-pc"/>  
        <aop:pointcut expression="execution(* *..service.impl..*(..))" id="service-pc"/>  
        <aop:advisor advice-ref="txAdvice" pointcut-ref="dao-pc"/>  
        <aop:advisor advice-ref="txAdvice" pointcut-ref="service-pc"/>  
    </aop:config>
    切面表达式什么的你自己改一改。
      

  3.   

    在普通的java项目中通过main方法自行写了个批量添加操作,其中一个操作出现异常,事务回滚,可是在java web项目中当出现异常,未出现异常的操作却更新了数据表你的main方法 怎么用的事物回滚?web工程 要看你对那一层进行事务回滚了
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
         <property name="beanNames">
         <list>
         <value>*Manager</value>
         </list>
         </property>
        
         <property name="interceptorNames">
             <list>
                 <value>transactionInterceptors</value>
             </list>
         </property>
    </bean>我以前是配置拦截所有的manager 
      

  4.   

    采纳了2楼的建议,用AOP重新配置了事务,感谢大家的建议,结贴,给分,吃饭去了!