在spring中配置了声明式事务有什么用呢???是不是配置了之后我们就可以不用自己开启事务和关闭事务了????那如果这样的话,我们在方法中还要不要有session对象

解决方案 »

  1.   

    <tx:advice id="advice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="update*" propagation="REQUIRED"/>
    <tx:method name="delete*" propagation="REQUIRED"/>
    <tx:method name="insert*" propagation="REQUIRED"/>
    </tx:attributes>
    </tx:advice>
    <aop:config>
    <aop:advisor advice-ref="advice" pointcut="execution(* com.h2isea.erp.order.service.*.*(..))"/>
    </aop:config>
    这个配置表明在com.h2isea.erp.order.service包下的类,并以update,delete,insert开头的方法由spring的事务管理,
    而在这些类中,不需要求做任务的事务处理,换句话说,就是写没有事务的带码就可以了
              com.h2isea.erp.order.service包下的一个OrderService实现方法

            public int updateOrder(Order order) {
    return this.orderDAO.updateOrder(order);
    }
            OrderDAO的实现
            
             public int updateOrder(Order order) {
    return this.sqlMapClientTemplate.update("order.updateOrder", order);
    }从头到尾是没有任何事务代码的,但是由于红色部分,也就有了事务
      

  2.   


    <tx:method name="update*" propagation="REQUIRED"/> 
    <tx:method name="delete*" propagation="REQUIRED"/> 
    <tx:method name="insert*" propagation="REQUIRED"/> 
    换为
    <tx:method name="*"/> 就是让SPRING处理所有的方法的事务了。
      

  3.   

    1.声明式事务配置将配置方式与应用代码之间剥离开来,减少了事务的配置对应用代码的侵入。我个人认为是spring的一大闪光的地方。呵呵~~~2.如果配置了声明式事务,在应用代码中,不需要对事务进行任何的处理,包括你所说的开启和关闭事务,甚至提交及回滚的事务处理。3.spring对声明式事务的实现,是通过threadlocal把session和对应的事务放入到同一个线程中。换句话来说事务是一个流程,而session就是这个流程的载体。对于方法中,session对象的建立也最好交给spring来进行。如果不同session的事务是无法进行处理的。对于spring声明式事务的处理,还是需要深入进去了解下才能真正明白其使用的依据和方法的。建议在了解如何配置和使用之后,深入的去学习下。
      

  4.   

    那配置了spring声明式事务后,在方法中应该用什么方式操作数据,还能不能用类似session.save(a);这样来操作,还是说只能用this.getHibernateTemplate()来操作
      

  5.   


    通过Template来进行操作。一般将事务配置在service层。
      

  6.   

    1 可以通过getHibernateTemplate()来操作数据,应为他封装了hibernate的session的各种操作
    2 可以通过注入SessionFactory 
    3 可以使用回调方式调用hibernate的方法(HibernateTemplate就是封装的回调方法)
    4 可以获取当前线程绑定的session来操作数据,继承HibernateDaoSupport ,然后用getSession(getSessionFactory(), false);当然用getHibernateTemplate()是最简单实用的,详情请见spring中文参考手册