mysql - 以相同的方法在一个事务 block 内的两个表中插入记录

标签 mysql transactions spring-transactions

我想以相同的方法在一个事务中的两个表中插入/更新记录。

首先插入表1,如果成功则更新表2,然后如果两者都成功则仅提交,否则不提交(在两个表中)

我的代码如下:

@Transactional
public void persistTable1AndTable2() {
    persistTable1(List<Table1Entity>);
    updateTable2(List<Table2Entity>);
}

但是,当我测试代码时,如果在 persistTable1 行之后我终止进程,它仍然会在第一个表中插入记录。 所以它不认为这是 block 交易。

我正在使用mysql。

补充一下: 上面table1和table2都使用单独的transactionmanager和entityManagerFactory

有人可以帮忙吗

[编辑]

使用atomikos API配置JTA的代码。

//Atomikos related JTA configuration
@Bean(name="userTransactionServiceImp")
public UserTransactionServiceImp userTransactionServiceImp()
{
    Properties properties = new Properties();
    properties.setProperty("com.atomikos.icatch.max_timeout", "600000");
    UserTransactionServiceImp userTransactionServiceImp = new UserTransactionServiceImp(properties);
    return userTransactionServiceImp;
}

@Bean
@DependsOn("userTransactionServiceImp")
public UserTransaction userTransaction()
{
    UserTransactionImp userTransactionImp = new UserTransactionImp();
    return userTransactionImp;
}

@Bean
@DependsOn("userTransactionServiceImp")
public TransactionManager userTransactionManager()
{
    UserTransactionManager userTransactionManager = new UserTransactionManager();
    userTransactionManager.setStartupTransactionService(false);
    userTransactionManager.setForceShutdown(false);
    return userTransactionManager;
}

@Bean
public PlatformTransactionManager transactionManager()
{
    return new JtaTransactionManager(userTransaction(), userTransactionManager());
} 

并配置 jparepo 我有以下配置类:

@EnableJpaRepositories(basePackages = {"daemon.repository.entities"}, 
    transactionManagerRef="transactionManager", entityManagerFactoryRef = "eventsEntityMF")

最佳答案

我在这里找到了类似的例子

快速检查一下http://fabiomaffioletti.me/blog/2014/04/15/distributed-transactions-multiple-databases-spring-boot-spring-data-jpa-atomikos/

看看是否缺少某些配置

关于mysql - 以相同的方法在一个事务 block 内的两个表中插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43491323/

相关文章:

php - 我可以关闭未命名的 mysql 连接吗?

java - DB事务还是Java DAO的方法同步?

java - Spring - 执行两个 hibernate 更新查询而不是一个

spring - 隔离级别 READ_UNCOMMITTED 不起作用

java - 默认的@Transactional在底层是如何工作的?

PHP 不显示 MYSQL 查询的结果

mysql - 在内连接上获取多于一列

php - Mysql WHERE IN 函数中的 Order by 问题

hibernate - 第二个数据库操作卡住事务中的执行

java - 保存实体后,Hibernate 为使用@Formula 注释的实体属性返回 null