首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数据库中重复记录的最佳方法

检查数据库中重复记录的最佳方法
EN

Stack Overflow用户
提问于 2014-09-03 11:20:02
回答 2查看 2.4K关注 0票数 1

我需要在DB中创建礼品卡实体,其中礼品卡代码是由算法生成的,并且它们碰撞的几率很低。

在DB中插入礼品卡实体之前,我们需要检查重复礼品卡实体的可能性。

还需要注意以下几点

  1. 需要生成与管理员所要求的相同数量的礼品卡实体
  2. 为了遵循第1点,我们需要找到DB中已经存在的礼品卡代码,并且需要再次生成代码。

我使用Hibernate进行DB操作,我有以下选项。

第一种选择

  1. 创建礼品卡代码列表
  2. 开始为每个礼品卡代码创建实体,并尝试将它们插入DB中。
  3. 如果发现已有礼品卡实体的任何异常,请将该代码存储在丢弃的代码列表中。
  4. 重复删除列表的重复处理

第二种选择

  1. 生成礼品卡代码列表。
  2. 在创建礼品卡实体之前,检查DB中的重复代码。
  3. 对于丢弃的列表,再次创建礼品卡代码并遵循第2点。
  4. 对于最终列表,创建实体并插入到DB中

我对哪一种方法更可取感到有点困惑?

EN

回答 2

Stack Overflow用户

发布于 2014-09-03 11:50:37

若要确保不允许复制,则必须在用于存储礼品卡代码的列上具有唯一索引和/或唯一约束。

尽管如此,我建议第一种选择,因为如果礼品卡代码复制的可能性很低,则效率更高。另外,在第二个选项中,即使在插入新代码之前检查重复项,也无法保证在检查和插入之间的DB中没有插入相同值的代码,因此在插入引发约束异常时也必须处理这种情况。

票数 1
EN

Stack Overflow用户

发布于 2014-09-03 11:40:22

我将创建所有,然后使用JPQL lilke检查复制的值:

代码语言:javascript
复制
select p from Ticket p where p.id in (:idList)

使用这种“批处理”操作,您不需要在每次迭代时访问数据库。这就是你第一个选择的问题。

如果使用某种数据库规则,例如:约束或触发器,则可能会收到可能导致事务回滚的异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25643000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档