Hibernate 冬眠-如何捕捉;完整性约束冲突:唯一约束或索引冲突“;

Hibernate 冬眠-如何捕捉;完整性约束冲突:唯一约束或索引冲突“;,hibernate,exception,rollback,unique-constraint,hibernateexception,Hibernate,Exception,Rollback,Unique Constraint,Hibernateexception,在我的表中,我有一个唯一的约束。 在hibernate中,当我添加一个违反该约束的项时,我希望捕获它,这样它将更新而不是创建一个项 当我在周围设置“不尝试捕捉”挡块时 updated = query.executeUpdate(); 它得到以下错误 Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: WEEKROOST

在我的表中,我有一个唯一的约束。 在hibernate中,当我添加一个违反该约束的项时,我希望捕获它,这样它将更新而不是创建一个项

当我在周围设置“不尝试捕捉”挡块时

    updated = query.executeUpdate();
它得到以下错误

    Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: WEEKROOSTERITEMUNI
    Caused by: javax.persistence.RollbackException: Transaction marked as rollbackOnly
当我设置以下try catch块时

    try {
        updated = query.executeUpdate();

     }    
   catch(PersistenceException e){                                                         
        LOG.debug("this is PersistenceException exception throw");      
    } 
它得到以下错误

    Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: WEEKROOSTERITEMUNI
    Caused by: javax.persistence.RollbackException: Transaction marked as rollbackOnly
当我捕获“ConstraintViolationException”时,我只是不断获取约束异常,它不会捕获任何内容

    Caused by: org.hsqldb.HsqlException: integrity constraint violation: unique constraint or index violation: WEEKROOSTERITEMUNI

如何捕获该异常?

要捕获唯一约束,您应该捕获该异常约束ViolationException

回滚异常在较高级别抛出,因为
@Transactional
设置在较高级别,因此您无法在该级别捕获它。您需要在事务层中捕获它

更好的方法是检查对象是否已经存在于数据库层上。检查功能。 该检查函数是通过唯一约束获取的。这更好,因为您不需要捕获异常


您已经需要该对象的get函数,因为您以后要合并该对象。您不想合并分离的实例。

建议在SO[SO link][1][1]中查看此链接:当我这样做时,它不会捕获任何内容,我只是不断得到“起因:org.hsqldb.hsqldb异常:完整性约束冲突:唯一约束或索引冲突:WEEKROOSTERITEMUNI”您是否尝试捕获HibernateException?我捕获到一个DataIntegrityViolationException异常,它在并发访问数据库时不起作用。在检查和执行其他操作之间,另一个会话可能已经更改了数据库状态。