Hibernate 休眠:防止不同线程插入重复行
我正在使用hibernate对Spring进行数据持久化 情况是Hibernate 休眠:防止不同线程插入重复行,hibernate,Hibernate,我正在使用hibernate对Spring进行数据持久化 情况是 时间-00小时:01分钟:01秒:100毫秒 已收到请求-1,请求持久化名为“abc”、姓为“Xyz”的人员(考虑本次会话1) 如果存在相同的记录,则查找数据库 没有找到任何记录 对象创建后,Hibernate将为记录生成唯一的ID 时间-00小时:01分钟:01秒:102毫秒 已收到请求-2,请求持久化名为“abc”、姓为“Xyz”的人员(考虑本次会话2) 如果存在相同的记录,则查找数据库 没有找到任何记录 对象创建后
时间-00小时:01分钟:01秒:100毫秒
- 已收到请求-1,请求持久化名为“abc”、姓为“Xyz”的人员(考虑本次会话1)
- 如果存在相同的记录,则查找数据库
- 没有找到任何记录
- 对象创建后,Hibernate将为记录生成唯一的ID
时间-00小时:01分钟:01秒:102毫秒
- 已收到请求-2,请求持久化名为“abc”、姓为“Xyz”的人员(考虑本次会话2)
- 如果存在相同的记录,则查找数据库
- 没有找到任何记录
- 对象创建后,Hibernate将为记录生成唯一的ID
时间-00小时:01分钟:01秒:103毫秒
- 会话1使用saveOrUpdate()保存记录李>
时间-00小时:01分钟:01秒:104毫秒
- 会话2使用saveOrUpdate()保存记录李>
建议避免重复插入的方法。如果我理解正确,您没有任何可唯一识别的字段,这些字段可以告诉后端,传入的记录是在几秒钟之前收到的重复记录 在这种情况下,恐怕没有直接的方法来处理(我可能错了)。可以有间接的方式,如
- 在插入之前检查审核日志,以检查在最后几秒钟或几分钟内是否插入了具有类似数据的记录
- 将唯一代码从后端发送到前端。前端必须使用该代码访问后端。代码在一次性使用后过期。并在每次插入前检查FE发送的代码是否有效
有很多这样的方法,并且必须根据项目的复杂性、性能要求等得出最佳解决方案。您个人如何解决此问题?为什么您有一个包含自动生成ID的唯一索引?为什么会出现这样的指数?是的,经过几天的思考,我甚至找不到任何直接的方法来处理这个案件。谢谢你提出可能的解决办法。将尝试提出审计建议。