gpt4 book ai didi

mysql - 如何防止 findByName 方法的并发请求?

转载 作者:行者123 更新时间:2023-11-29 10:09:48 25 4
gpt4 key购买 nike

我正在使用 Spring Boot 和 Spring Data 来开发使用微服务架构的应用程序。在我的场景中,微服务有一个像这样的存储库

    @Repository
public interface JobInfoRepository extends JpaRepository<JobInfo, UUID>, JpaSpecificationExecutor<JobInfo> {

boolean existsByNameAndOrganization(String name, UUID organization);

boolean existsByIdNotAndNameAndOrganization(UUID id, String name, UUID organization);

}

以及使用此存储库的服务方法

    @HystrixCommand
public JobInfo save(JobInfo entity) {
if (repository.existsByNameAndOrganization(entity.getName(), entity.getOrganization())) throw new ValueAlreadyExistException(entity.getName());
return repository.save(entity);
}

当我同时调用此服务方法时,existsByNameAndOrganization 方法返回 false。第一个线程可以在数据库中创建一条记录。之后第二个线程可以创建另一个同名的记录。防止这种行为的正确方法是什么?

最佳答案

不要调用 save(),而是调用 EntityManager.persist() ,如果实体已经存在,则会抛出 EntityExistsException。

您还可以在 mysql 中创建唯一约束,按名称和组织索引。

关于mysql - 如何防止 findByName 方法的并发请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51216980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com