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

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

傅穆冉
2023-03-14

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

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

我的代码如下所示:

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

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

我用的是mysql。

补充一下:上面的表1和表2都使用单独的事务管理器和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")

共有1个答案

索曾琪
2023-03-14

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

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

查看是否缺少某些配置

 类似资料:
  • 批量订单 Purchorder 我已经试了一个星期了。我有这两个表,batchporder和purchord在batchporder表中,我需要插入一行,并获得传递给purchord插入的主id。在purchord中,我需要插入多行,因此我使用了insert\u batch。 控制器 模型 错误1 遇到PHP错误严重性:警告 消息:array_keys()要求参数1为数组,字符串为给定值 文件名:

  • 问题内容: 我有上面的表格(非常简化的示例),我要在一个表格中插入订单的详细信息和订单的详细信息。 我熟悉事务,可以使用如下所示的SQL命令插入数据: 但是,理想情况下,如果可能的话,我希望有一个类似上述查询的函数,而不是存储在我的应用程序中。 谁能指出我为postgres函数提供多个记录的正确方向吗?另外,如果我想做的事情被认为是不好的做法,请让我知道我应该遵循的其他路线。 提前致谢。 问题答案

  • 在一个表中有两列可以是来自同一表的外键,这样可以吗? 例如: 我有一个“address”表,表中有列: id,street,city_id,state,country(或id,street,city_id,state_id,state_id) 我有一个'states'表,保存状态和国家:id、name、level 那么我可以把states_id放在地址表的state和country中吗(如上面的括

  • 我写了一个启动两个线程的代码片段;一个线程打印所有奇数,而另一个线程打印所有偶数。我使用了内在锁和线程通信命令的组合来实现两个线程的正确交叉。这是我的代码, 以下是我的问题: > 奇数线程在printOdd()函数中执行,而偶数线程在print偶数()函数中执行。我对两个线程都使用一个内在锁;我不明白两个线程怎么能同时存在于各自的同步块中,因为使用了相同的锁。 我从代码中删除了线程通信语句(通知,

  • 我改变了切入点的顺序,它总是排在第二位。关于如何解决这个问题有什么想法吗? 更新 一旦我发布了这个问题,我就有了一个想法。我这样更改了切入点: 现在异常消失了,但仍然有一个小问题(我想这个问题更容易解决):因为ArrayList实现了可序列化,所以至少在我使用ArrayList的测试用例中,两个切入点都被执行了。 我将对此进行研究,并发布我的发现,但也感谢您的帮助;) 我将代码改为只使用一个切入点

  • 问题内容: 所以我有两个包含主键’User’的模型 现在,我想查找也在中的用户的所有评论。例如,假设 用户“ 1”* 为 用户“ 3” 和 用户“ 5” 分别撰写了一条评论 * 现在,我输出的应该是对应于“ LoremIpsum1”的评论对象,即其subject_user也存在于中的评论对象。我尝试了以下 但这给了我所有的评语 编辑: 这是我插入评论的方式: 问题答案: 如果我对您的理解正确,这应