当前位置: 首页 > 知识库问答 >
问题:

使用JDBC和Hibernate 4进行Spring事务管理

龙高超
2023-03-14

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

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

为了让JDBC和JPA连接同一个事务并查看另一个事务所做的更改,我们还必须对Hibernate/JPA使用TransactionAwareDataSourceProxy。但是,在所有其他事务配置的情况下,这似乎是多余的。我们漏掉什么了吗?或者这是达到要求的建议方式?

共有1个答案

焦光霁
2023-03-14

>

  • 我认为,如果在JDBC代码中使用session.doWork的同时将Hibernate和JTA DataSource存储在一起,则可以获得相同的结果,而配置麻烦要少得多。

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

    您需要添加:

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

  •  类似资料:
    • 上下文2。XML 这会导致将抽象类的transactionManager属性设置为服务器启动期间创建的最后一个注释事务方面bean'org.springframework.transaction.interceptor.TransactionAspectSupport。 因此,如果实例化的最后一个bean是dataSource1,则在dataSource1上创建事务,否则在DataSource2上

    • 我发现实际上是Spring,我能够设置一些工作。现在,我想使用Hibernate/JPA将导入的数据保存到数据库中,但我总是出现这样的错误: 我明白问题出在交易上。以下是和的spring java配置: 这是导致异常的代码: 有什么解决这个问题的想法吗? [编辑]我也放入了作业定义和步骤定义。我所有的Spring配置都是用Java编写的。 任何人都可以给出更多的见解,如何在spring Batch

    • 问题内容: Spring框架在多大程度上适用于事务处理?我读过《 Spring In Action》一书中的建议,并提供了一些示例,这些示例创建了不用担心会话和事务管理的DAO方法,只需通过以XML设置会话工厂和事务模板,然后将它们连接到DAO中即可。另一方面,SpringSource.org的文档建议需要大量的XML和/或注释才能实现此目的。 真相是什么,我按照以下方式获取代码的最简单方法是什么

    • 我的项目中有普通的jdbc连接池,并使用ejb进行事务处理。现在我想将事务管理更改为Spring事务管理,但我不想为此创建单独的数据源,我想使用相同的普通连接池。 有可能吗? 下面是我的Springbean for transaction(数据源是空的,因为我不知道如何从普通的jdbc连接池进行设置)

    • 在db会话监视器中,当这种情况发生时,我得到了一个不活动的事务。 我得到的错误如下: 问题是交易和连接应该自动打开和关闭...我希望并发修改失败的事务得到回滚...但似乎他们变得不活跃了。

    • 本文向大家介绍Spring 使用注解方式进行事务管理配置方式,包括了Spring 使用注解方式进行事务管理配置方式的使用技巧和注意事项,需要的朋友参考一下 使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 步骤三、在接口或类的声明处 ,写一个@Transactional. 要是只在接口上写, 接口的