如何使用hibernate避免遇到违反唯一约束的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用hibernate避免遇到违反唯一约束的问题?相关的知识,希望对你有一定的参考价值。
我有一个数据库表,其中一个列上定义了唯一约束。我还有一个带有多个线程的消息处理系统。在消息被消耗时,有时可能有两个消息包含具有相同值的相同实体(定义了唯一约束的列的值)。因此,在代码中,服务层首先使用此唯一字段(通过hibernate命名查询)查询数据库,以查看是否存在任何记录。如果没有,则插入新记录。如果已存在具有此唯一字段的记录,则不会插入记录,而是更新记录,并在另一个表中插入子记录。
我遇到了一个问题,其中第二个线程认为该记录还没有,所以它试图将其插入。但是,此时第一个线程已经成功插入记录。因此违反唯一约束会抛出异常。你能帮助使用hibernate / oracle解决方案来处理这种情况的最佳方法吗?我需要某种锁定选项吗?谢谢。
在这种情况下,试图避免回滚违背了MVCC的精神(特别是由Oracle使用),因为它需要过多的锁定。
我认为最好通过启动另一个事务来执行更新来对插入回滚作出反应。
以上是关于如何使用hibernate避免遇到违反唯一约束的问题?的主要内容,如果未能解决你的问题,请参考以下文章
org.hibernate.exception.ConstraintViolationException:违反唯一约束条件,求大侠指点
JAVA hibernate中删除表遇到主键被外键引用,违反完整约束条件,不能删除的问题 2张表,一张主表user,有
Hibernate 两次将数据插入到 Join Table 中,导致 Spring Boot 项目中出现“ORA-00001:违反唯一约束”