各位大侠:
    首先我先申明一下,在我系统里最小的改动是加一个spring的编程事务管理,但是碰到问题,代码如下:      PlatformTransactionManager tm=(PlatformTransactionManager) ServiceUtil.getBean("transactionManager");
      DefaultTransactionDefinition def = new DefaultTransactionDefinition();
      PlatformTransactionManager status = tm.getTransaction(def);
      SessionFactory sessionFactory=(SessionFactory) ServiceUtil.getBean("sessionFactory"); 
      Session session = sessionFactory.openSession();
      ....
      session.save(obj);
      tm.commit(status);
    applicationContext.xml配置如下:
       <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
   <ref bean="myDataSource" />
  </property>
<property name="configLocation">  
<value>classpath:hib.cfg.xml</value>  
</property> 

   </bean>
   
  <bean id="transactionManager"                             class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
          <property name="sessionFactory">  
              <ref local="sessionFactory" />  
          </property>  
      </bean>  最终事务没有成功提交,请高手指点。

解决方案 »

  1.   

    <!--  配置事务的传播特性 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="save*" propagation="REQUIRED" />
    <tx:method name="add*" propagation="REQUIRED" />
    <tx:method name="delete*" propagation="REQUIRED" />
    <tx:method name="modify*" propagation="REQUIRED" />
    <tx:method name="update*" propagation="REQUIRED" />
    <tx:method name="*" read-only="true" />
    </tx:attributes>
    </tx:advice>
    <!--  那些类的哪些方法参与事务 -->
    <aop:config>
    <aop:pointcut id="ibizMethod" expression="execution(* my.ibiz.*.*.*(..))" />
    <aop:advisor pointcut-ref="ibizMethod" advice-ref="txAdvice" />
    </aop:config>
    你应该没有配置上面的一些东东, 至少你的配置里面没有 事务作用的类或者方法,也就是说你只是配置一个事务管理,但是来管理谁没有指明。
      

  2.   

    2楼说的很正确啊,我同样认为你的SPRING配置出错了.
      

  3.   

    应该是先打开 session,试试看下面这个顺序
    opensession-> tm.getTransaction(def) -> session.save -> tm.commit