• Spring JDBC和Hibernate混用时,如何配置事务管理


    由于我们项目的需求比较变态,一部分功能由于需要通过数据库配置表动态生成持久化逻辑,所以只得采用Spring JDBC,而另一部分的业务数据模型比较固定,所以我打算对这部分使用Hibernate。这样,一个应用系统同时存在Spring JDBC和Hibernate两种持久化技术。
         我采用Spring 2.0,通过给注解驱动的方式进行事务管理,也就是说在Service接口中打@Transaction注解,并在配置文件中配置: 
    Java代码  
      <bean id="transactionManager"  
    lass="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    <property name="sessionFactory" ref="sessionFactory" />  
      </bean>  
      <tx:annotation-driven transaction-manager="transactionManager" />   
     
        但是一个Spring容器只能配置一个配置一种类型的事务管理器,要么使用基于JDBC的 
      DataSourceTransactionManager,要么使用Hibernate的HibernateTransactionManager。 
      现在我是同时需要DataSourceTransactionManager和HibernateTransactionManager,而 
       <tx:annotation-driven >只允许设置一个事务管理器。如果我要让Spring JDBC和Hibernate 
      这两种方式共存于一个应用系统中,请问该如何配置呢? 
          不知哪位朋友有遇到过和我相似的问题,请伸出您的热忱双手吧,帮我分析一下,我快疯了:( 
     我补充一下,同一个表,同一个DAO我不会同时使用JDBC和Hibernate,是一个模块完全使用JDBC,而另外一个模块完成使用Hibernate,所以不会有缓存更新两两不相知的问题。我的问题是一个采用Spring JDBC的模块和一个采用Hibernate的模块共存于一个系统中,我要如何在Spring中进行事务管理配置。谢谢!
     
     
     
    只要使用org.springframework.orm.hibernate3.HibernateTransactionManager就可以了,不必单独为jdbc配事务
     
     
     
    cammette 写道
    只要使用org.springframework.orm.hibernate3.HibernateTransactionManager就可以了,不必单独为jdbc配事务
     
     
    我也有这方面的疑问,那是不是说 
     
    Java代码  
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory"/>  
    </bean>  
     
     
    Java代码  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
     
     
    这两者就是完全等价的呢?在一个使用了jdbc和Hibernate的应用中,bean配置随意使用一个即可,或者全部使用HibernateTransactionManager的transactionManager即可呢?? 
     
    谁能详细说明一下,谢谢!
     
    http://www.iteye.com/topic/37707
     
     
     
    ******************************************
    Hibernate与JDBC事务整合
    最近摸索了一下Hibernate与JDBC(iBATIS)事务整合问题,算是有点收获,写出来和大家讨论一下吧。。。
    一般大家都会使用Spring声明型事务 transactionAttributes 为 PROPAGATION_REQUIRED
    Hibernate 使用 HibernateTransactionManager 、JDBC(iBATIS) 使用 DataSourceTransactionManager
    当需要将它们整合到一个事务中的时候
    普通的做法是配置统一的DataSource, Hibernate与JDBC(iBATIS) 都使用HibernateTransactionManager
    坛子里有篇帖子已经详细论述了这种整合方案 http://www.iteye.com/topic/11063?page=2
    ------------------------------------------------------
    Hibernate与JDBC(iBATIS) 都使用DataSourceTransactionManager又可不可以呢?
    普遍的看法是 NO! 认为DataSourceTransactionManager根本就不处理Hibernate的session,事务当然无法实现。。。
    但事实是否真的如此呢?
    答案同样是 NO! http://forum.springframework.org/archive/index.php/t-9878.html
    Juergen Hoeller:
    Just if you proxy your JDBC DataSource with a TransactionAwareDataSourceProxy (available since Spring 1.1 RC1) and pass that proxy to your LocalSessionFactoryBean, you could use DataSourceTransactionManager in combination with Hibernate.
    也就是说配置 sessionFactory  的 useTransactionAwareDataSource 为 true
    Hibernate与JDBC(iBATIS)  都使用 DataSourceTransactionManager 同样可以保证事务
    原理就是保证了 connection 的唯一性。
     
  • 相关阅读:
    Intellij IDEA 打开文件tab数量限制的调整
    Mysql处理中文乱码的问题
    MIT算法导论笔记
    算法导论-排序(一)-插入排序、归并排序
    leetcode题解:Search for a Range (已排序数组范围查找)
    leetcode 题解:Merge Sorted Array(两个已排序数组归并)
    leetcode题解:Construct Binary Tree from Inorder and Postorder Traversal(根据中序和后序遍历构造二叉树)
    leetcode题解:Construct Binary Tree from Preorder and Inorder Traversal (根据前序和中序遍历构造二叉树)
    c++11 std::prev、std::next、std::advance与auto 使用
    (转)指针的引用(*&)与指针的指针(**)
  • 原文地址:https://www.cnblogs.com/huapox/p/3251499.html
Copyright © 2020-2023  润新知