事务下spring jpa中并发请求重复记录

问题描述 投票:0回答:1

嗨,我使用 spring jpa 插入一条记录,我的问题是如果 id 存在于数据库中,则使用此记录,否则生成它,并且此生成过程必须是事务性的。在我插入记录之前,我检查它是否存在于数据库中。我的问题是当两个请求同时出现,此控制不起作用。我对数据库设置了唯一约束,但当时其中一个请求失败了。如何在并发请求的事务控制下使记录存在?

@transactional
Public
void
save()  { checkexist ? Useit: create

spring-data-jpa spring-transactions
1个回答
0
投票

一般来说,jpa使用乐观锁

然后你说“如果数据库中存在id,则使用此记录,否则生成它,并且此生成过程”不保证每个事务的原子操作。 持久化上下文中的实体之间的比较仅在 commit() 时进行

我认为简单的解决方案是严格更改隔离级别。 否则,如果 ids 大小很小并且应用程序不在多个进程中运行,那么如何在线程安全中创建和使用计数器对象呢?

© www.soinside.com 2019 - 2024. All rights reserved.