gpt4 book ai didi

java - SaveOrUpdate 时出现唯一约束冲突错误

转载 作者:行者123 更新时间:2023-11-30 06:28:04 26 4
gpt4 key购买 nike

我有一个名为客户的 hibernate 实体,其中包含有关客户的信息。在我的方法中,我将客户详细信息作为参数获取,我需要将其插入数据库。因此,要删除重复条目,我会检查该客户是否已存在于数据库中。但问题是,如果在同一时刻使用相同的客户信息对同一方法进行两次调用,那么我将收到约束违反错误。我认为 saveOrupdate() 会解决问题,但事实并非如此。有人可以针对这种情况提出解决方案。

最佳答案

saveOrUpdate 用于完全不同的目的。它用于持久化一个可能已经被持久化的实体(有一个 id 和所有)或者它可能是一个新的 id。它与并发访问无关。

对于您的问题,有两种选择,称为乐观锁定和悲观锁定。

悲观锁:您在检查客户是否存在之前创建一个锁,因此只有当前线程可以继续,它会进行检查并采取相应行动。任何其他带有相同数据的线程都必须等到第一个线程的更新或插入完成。锁可以在数据库中实现,如果您在单台机器上运行,则使用 hibernate 或简单的同步块(synchronized block)。

乐观锁定:您只需像现在一样继续操作。但是您放置了一个异常处理程序来处理您在问题中描述的碰撞情况。

悲观锁可能更容易使用同步块(synchronized block)实现,但它会非常糟糕地影响性能和可伸缩性。

关于java - SaveOrUpdate 时出现唯一约束冲突错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980217/

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