5

在我的表中,我有一个独特的约束。在休眠中,当我添加一个违反该约束的项目时,我想抓住它,所以它将更新而不是创建一个项目。

当我没有设置 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

我怎么能抓住这个?

4

2 回答 2

0

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

于 2013-11-14T08:57:10.457 回答
-1

因为设置在更高的杠杆上,所以RollbackException被扔到更高的水平@Transactional,所以你无法在那个水平上抓住它。您需要在事务层中捕获它。

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

您已经需要该对象的 get-function,因为您稍后想要合并该对象。您不想合并分离的实例。

于 2013-11-14T09:22:56.550 回答