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

时间:2014-09-03 11:20:03

标签: java sql hibernate jpa jpa-2.0

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

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

还需要注意以下几点

  1. 需要根据admin
  2. 的要求生成相同数量的礼品卡实体
  3. 为了遵循第1点,我们需要找到DB中已存在的礼品卡代码,并且需要再次生成代码。
  4. 我正在使用Hibernate进行数据库操作,我有以下选项。

    第一个选项

    1. 创建礼品卡代码列表
    2. 开始为每个礼品卡代码创建实体,并尝试将其插入数据库。
    3. 如果我们发现现有礼品卡实体有任何例外,请将该代码存储在丢弃的代码列表中。
    4. 再次重复废弃列表的处理
    5. 第二选项

      1. 生成礼品卡代码列表。
      2. 在创建礼品卡实体之前,请检查数据库中的重复代码。
      3. 对于丢弃列表,再次创建礼品卡代码并按照第2点。
      4. 最终列表创建实体并插入到数据库
      5. 我对哪种方法更适合我有点困惑?

2 个答案:

答案 0 :(得分:1)

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

那就是说,我会推荐第一个选项,因为如果礼品卡代码重复的可能性很小,它会更有效率。另外在第二个选项中,即使您在插入新代码之前检查重复项,也不能保证在检查和插入之间没有在DB中插入具有相同值的代码,因此您还必须处理该案例插入时抛出约束异常。

答案 1 :(得分:0)

我会创建所有,然后使用JPQL lilke检查重复值:

select p from Ticket p where p.id in (:idList)

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

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