gpt4 book ai didi

java - 一起使用 JDBC 和 Hibernate 4 进行 Spring 事务管理

转载 作者:行者123 更新时间:2023-11-30 11:11:36 25 4
gpt4 key购买 nike

我们使用 JPA (Hibernate 4) 和 Spring 4 来管理 JTA 事务。由于应用程序的某些部分也使用 JDBC 访问数据库,因此我们需要确保 JDBC 和 JPA 加入同一事务,以查看另一个在提交之前更改了什么。

您可以在 GitHub 上找到这些问题的测试用例 https://github.com/abenneke/sandbox/tree/master/spring-hibernate4-transaction

要让 JDBC 和 JPA 加入同一事务并查看对方所做的更改,我们还必须为 Hibernate/JPA 使用 TransactionAwareDataSourceProxy。然而,对于所有其他事务配置,这似乎是多余的。我们错过了什么吗?或者这是实现要求的建议方法?

谢谢!

最佳答案

  1. 我认为,如果您在使用 Session 时存储到 Hibernate 和 JTA DataSource,您可以获得相同的结果,而且配置麻烦要少得多。 doWork用于您的 JDBC 代码。

  2. 您不需要 TransactionAwareDataSourceProxy,因为无论如何您都想使用事务服务,而不是在事务服务之外调用 DAO 类。

  3. 您需要添加:

    <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>

    并确保将其提供给 testEntityManager

    <bean id="testEntityManager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="testDataSource">
    ...
    <property name="jpaDialect" ref="jpaDialect"/>
    </bean>

更新

在我们最近开发的一个应用程序中,我们也混合了 JPA 和 JDBCTemplate,它工作得很好,因为 Bitronix PoolingDataSource 被指示始终为当前运行的线程返回相同的连接。

为此,您必须设置以下 Bitronix property :

shareTransactionConnections=true

关于java - 一起使用 JDBC 和 Hibernate 4 进行 Spring 事务管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27342424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com