在我的表中,我有一个独特的约束。 在休眠状态下,当我添加违反该约束的项目时,我想要捕获它,因此它将更新而不是创建项目。
当我没有设置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
我怎么能抓住这个?
答案 0 :(得分:0)
要捕获唯一约束,您应该捕获此异常ConstraintViolationException
答案 1 :(得分:-1)
RollbackException
被提升到更高的级别,因为@Transactional
设置在更高的杠杆中,因此您无法在该级别上捕获它。您需要在交易层中捕获它。
更好的方法是检查数据库层上是否已存在该对象。检查功能。 该检查功能是由唯一约束得到的。这样做更好,因为您不需要捕获异常。
您已经需要该对象的get函数,因为您以后想要合并该对象。您不想合并分离的实例。