Hibernate - 如何捕获“完整性约束违规:唯一约束或索引违规”

时间:2013-11-14 08:54:30

标签: hibernate exception rollback unique-constraint hibernateexception

在我的表中,我有一个独特的约束。 在休眠状态下,当我添加违反该约束的项目时,我想要捕获它,因此它将更新而不是创建项目。

当我没有设置try-catch块时

    updated = query.executeUpdate();

它出现以下错误

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

当我设置以下try-catch块

    try {
        updated = query.executeUpdate();

     }    
   catch(PersistenceException e){                                                         
        LOG.debug("this is PersistenceException exception throw");      
    } 

它收到以下错误

    Caused by: javax.persistence.RollbackException: Transaction marked as rollbackOnly

当我捕获“ConstraintViolationException”时,我只是继续获得约束异常,它没有捕获任何内容。

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

我怎么能抓住这个?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

RollbackException被提升到更高的级别,因为@Transactional设置在更高的杠杆中,因此您无法在该级别上捕获它。您需要在交易层中捕获它。

更好的方法是检查数据库层上是否已存在该对象。检查功能。 该检查功能是由唯一约束得到的。这样做更好,因为您不需要捕获异常。

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