Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring声明性事务管理使用jdbc模板失败_Java_Spring_Jdbc_Spring Transactions - Fatal编程技术网

Java Spring声明性事务管理使用jdbc模板失败

Java Spring声明性事务管理使用jdbc模板失败,java,spring,jdbc,spring-transactions,Java,Spring,Jdbc,Spring Transactions,我使用的是Spring 3.2.2版本 我在jdbc模板中使用@Transactional时遇到了一个问题 我的XML配置如下: <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" p:sessionFactory-ref="sessionFactory" /> <bean id="reportTransacti

我使用的是Spring 3.2.2版本

我在jdbc模板中使用@Transactional时遇到了一个问题

我的XML配置如下:

<bean id="transactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager"
    p:sessionFactory-ref="sessionFactory" />

<bean id="reportTransactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="reportDataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" order="0"/>
<tx:annotation-driven transaction-manager="reportTransactionManager" order="1"/>
所以问题是,无论何时任何服务失败,都应该回滚,但在我的情况下,如果假设服务7失败,所有服务都回滚,除了一个服务,即仅服务4

我认为可能是事务没有传播到Service4API,然后我使用

   TransactionSynchronizationManager.getCurrentTransactionName();
   TransactionSynchronizationManager.isSynchronizationActive();
   TransactionSynchronizationManager.isCurrentTransactionReadOnly();
   TransactionSynchronizationManager.isActualTransactionActive();
它会正确地将事务及其详细信息返回给我,但仍然不会回滚

我很惊讶为什么只有那个服务api没有回滚,有人能给我建议一下吗

注意:除了根方法中的deleteAndSave api外,没有其他服务/存储库类没有任何@transaction,因为默认情况下spring将传播。
我对hibernate transactionManager没有任何问题,因为这些服务仅涉及reportTransactionManager。

您展示了使用两个不同的事务管理器,但没有说明它们与不同的服务之间的关系。哪种使用sessionFactory哪种使用reportDataSource?Hibernate事务管理器,我在不同的服务中使用,但我的问题是reportTransactionManager,我问的问题不同,不同的服务只处理reportDataSource而不处理sessionFactory吗?我有理由,事务管理器没有问题,该服务实际上无法处理Mysql MyISAM引擎,因此MyISAM不支持事务,因此我将DB引擎更改为InnoDB,然后其工作正常。对不起,打扰你们了!!
   TransactionSynchronizationManager.getCurrentTransactionName();
   TransactionSynchronizationManager.isSynchronizationActive();
   TransactionSynchronizationManager.isCurrentTransactionReadOnly();
   TransactionSynchronizationManager.isActualTransactionActive();