我需要在DB中创建礼品卡实体,其中礼品卡代码由算法生成,并且它们的碰撞机会很低。
在将礼品卡实体插入数据库之前,我们需要检查重复礼品卡实体的可能性。
还需要注意以下几点
我正在使用Hibernate进行数据库操作,我有以下选项。
我对哪种方法更适合我有点困惑?
答案 0 :(得分:1)
为确保不允许重复,您必须在用于存储礼品卡代码的列上具有唯一索引和/或唯一约束。
那就是说,我会推荐第一个选项,因为如果礼品卡代码重复的可能性很小,它会更有效率。另外在第二个选项中,即使您在插入新代码之前检查重复项,也不能保证在检查和插入之间没有在DB中插入具有相同值的代码,因此您还必须处理该案例插入时抛出约束异常。
答案 1 :(得分:0)
我会创建所有,然后使用JPQL lilke检查重复值:
select p from Ticket p where p.id in (:idList)
通过这种“批处理”操作,您无需在每次迭代时访问数据库。这是你的第一个选择的问题。
如果使用某种数据库规则,例如:约束或触发器,则可能会收到可能导致事务回滚的异常。