zoukankan      html  css  js  c++  java
  • Spring中配置Hibernate事务管理

    <!-- transationManager -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- advice  -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED"/>
          <tx:method name="delete*" propagation="REQUIRED"/>
          <tx:method name="update*" propagation="REQUIRED"/>
          <tx:method name="select*" propagation="SUPPORTS"  read-only="true"/>
          <tx:method name="*" rollback-for="java.lang.Exception" timeout="100" />
        </tx:attributes>
    </tx:advice>
    <aop:config proxy-target-class="true">
        <aop:pointcut id="interceptorPointCuts" expression="execution(public * com.bai.du.*.service.impl.*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
    </aop:config>            

      这里统一规定了service实现类中与事务有关的方法的命名规则,比如新增方法,方法名必须以insert开头;删除方法,方法名必须以delete开头;更新方法,方法名必须以update开头,查询方法必须以select开头,以什么开头或结尾这可以自定义,只有这样方法才能被spring的事务管理,为什么要在service层配置事务呢?这是因为service中定义的是业务操作(比如存取款),而这个业务操作可能需要多次操作数据库,为防止操作数据库过程中可能会出现部分成功,部分失败的情况,所以把事务放在service层,这样只有数据库操作全部成功(不报异常),整个事务才会提交。

      上面是采用xml配置事务,这样的好处是仅此一处配置,便可实现所有匹配的事务,事务配置与代码高度分离,缺点是需要遵循定义的命名规则,还有一种方法就是使用注解,只需要在xml文件中增加:

    <tx:annotation-driven transaction-manager="transactionManager"/>

    并且在需要事务管理的方法上添加@Transactional()注解(注意是spring包的),()中同样可以定义propagation,read-only,rollback-for等属性。注解的优势是配置比较灵活,xml文件中配置比较简洁,缺点是需要的地方就必须添加注解,比较繁琐,而且还增加代码的耦合。建议使用xml配置方式。

  • 相关阅读:
    DGL学习(一):使用DGL跑一个最简单的GCN
    2020-7-15
    2020-7-14
    2020-7-13
    hdu 6118度度熊的交易计划(费用流)
    玲珑OJ Down the Rabbit Hole (DFS序查找路径)
    csu 1982:小M的移动硬盘(双向链表)
    csu 1930 roads(DFS)
    LuoGuP4721:【模板】分治 FFT
    LuoGuP4284:[SHOI2014]概率充电器
  • 原文地址:https://www.cnblogs.com/manliu/p/4803512.html
Copyright © 2011-2022 走看看