【问题标题】:Using HibernateTransactionManager for jdbc template为 jdbc 模板使用 HibernateTransactionManager
【发布时间】:2014-03-20 18:19:16
【问题描述】:

我正在开发一个 Spring 应用程序,之前它使用 HibernateTransactionManager 进行事务处理,使用 jdbc 模板进行查询/更新,并且工作正常。 以下是使用的代码

<bean id="sybaseDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="MySybaseDS"/>
    <property name="lookupOnStartup" value="false"/>
    <property name="cache" value="true" />
    <property name="proxyInterface"  value="javax.sql.DataSource" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="sybaseDataSource" />
    <property name="mappingResources">
        <list>..........</list>
    </property>
    <property name="hibernateProperties">
        <props>
             <prop key="hibernate.dialect">
                org.hibernate.dialect.SybaseAnywhereDialect
             </prop>
             <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

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

 <bean id="txManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
             <ref local="sessionFactory"/>
        </property>
 </bean>

我正在创建一个新的应用程序,现在很困惑是使用 HibernateTransactionManager 还是 JpaTransactionManager 或两者都使用(可能吗?)。

应用程序将同时使用 HibernateTemplate 和 JdbcTemplate(用于批量更新)进行数据库操作,并且需要是事务性的。

我的意思是,我可以/应该将 HibernateTransactionManager 用于 jdbctemplate 和 HibernateTemplate 数据库操作的事务吗?使用一个事务管理器而不是另一个事务管理器会有任何性能瓶颈吗?

【问题讨论】:

    标签: java spring hibernate jdbctemplate


    【解决方案1】:

    简短的回答是它会起作用。另请参阅 this thread 以获取对低级详细信息的描述。

    【讨论】:

      【解决方案2】:

      如果应用程序基于 JPA(配置了实体管理器工厂),则应使用 JpaTransactionManager

      此事务管理器在事务期间将实体管理器绑定到线程。

      HibernateTransactionManager 用于不使用 JPA 而是直接使用 Hibernate 的应用程序(配置了会话工厂)。

      此事务管理器将休眠会话绑定到线程而不是实体管理器。

      它们的作用基本相同,只是一个处理 Session 而另一个处理 EntityManager。他们的选择仅取决于是否使用 JPA。

      根据各自的 javadocs,这两个事务管理器都与 JdbcTemplate 兼容。

      使用一个事务管理器与另一个相比没有性能后果。

      实体管理器在内部使用休眠会话,因此最终结果是相同的:休眠会话在事务期间直接或间接绑定到线程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 2016-12-06
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多