我有一个数据库表,其中一个列定义了唯一约束。我还有一个带有多个线程的消息处理系统。在使用消息时,有时两条消息包含具有相同值的相同实体(定义了唯一约束的列的值)。所以在代码中,服务层首先通过使用这个唯一字段(通过hibernate命名查询)来查询数据库,看看是否有任何记录存在。如果不是,则插入一条新记录。如果具有此唯一字段的记录已存在,则它不会插入记录,而是更新它并在另一个表中插入一条子记录。
我遇到了一个问题,其中第二个线程认为该记录尚不存在,因此它尝试将其插入。但是,此时第一个线程已经成功插入了记录。因此,违反唯一约束会引发异常。你能帮助使用hibernate/oracle解决方案处理这种情况的最佳方法是什么?我需要某种锁定选项吗?谢谢。