首页 > 解决方案 > Hibernate:防止不同线程插入重复行

问题描述

我正在使用休眠与 Spring 进行数据持久性。

情景是

Time- 00 Hour:01 Minute:01 Second:100 ms

Time- 00 Hour:01 Minute:01 Second:102 ms

Time- 00 Hour:01 Minute:01 Second:103 ms

Time- 00 Hour:01 Minute:01 Second:104 ms

由于两个会话都在生成唯一标识,因此休眠将它们视为单独的对象并持久存在于数据库中。但这稍后会导致应用程序出现问题。

我也有唯一索引,但也包括 Id 字段,因此 DB 也无法将它们视为唯一记录。

建议避免重复插入的方法。

标签: hibernate

解决方案


如果我理解正确,您没有任何唯一可识别的字段可以告诉后端传入记录是几秒钟前收到的重复记录。

在这种情况下,我很害怕,但可能没有直接的方法来处理这个问题(我可能错了)。可以有间接的方式,比如

  • 在插入之前检查审计日志,以检查是否在最后几秒或几分钟内插入了具有相似数据的记录。
  • 从后端向前端发送唯一代码。前端必须使用该代码打到后端。代码在单次使用后过期。并在每次插入之前检查从 FE 发送的代码是否有效

可以有许多这样的方法,并且必须根据项目的复杂性、性能要求等得出最佳解决方案。


推荐阅读