如何处理org.hibernate.exception.ConstraintViolationException,我使用try catch不起作用

时间:2017-05-25 08:04:50

标签: java hibernate

如何处理org.hibernate.exception.ConstraintViolationException?我正在使用try-catch,但它不起作用:

try {
    CandidateCollege newCandidateCollege = candidateCollegeRepo.save(candidateCollege);
    System.out.println(newCandidateCollege);
    if(newCandidateCollege != null){
        return new WithIncludes<>(newCandidateCollege);
    }
} catch (Exception ex) {
    System.out.println("==========ex.getMessage()============");
    log.error(ex.getMessage());
}
return null;

例外:

2017-05-25 15:52:43 ERROR SqlExceptionHelper:131 - Duplicate entry '270-1-4-2' for key 'ux_candidate_college'
==========ex.getMessage()============
2017-05-25 15:52:43 ERROR CandidateCollegeServiceImpl:67 - could not execute statement; SQL [n/a]; constraint [ux_candidate_college]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

3 个答案:

答案 0 :(得分:0)

在数据库中保存该条目之前,您可以检查它是否已存在,如果没有,则可以保存该条目。同时指定
catch(ConstraintViolationException cve){ //some appropriate thing to deal with the exception }

这样你也可以处理你正在寻找的特定异常情况!

答案 1 :(得分:0)

查看输出,我会说执行catch块。注意输出中的=====。上面的消息只是Hibernate的内部日志记录。我希望你的方法确实返回null。你检查过了吗?

答案 2 :(得分:0)

它不会捕获您的异常,因为在事务刷新时抛出了ConstraintViolationException,这实际上是在try-catch阻止之间或save()呼叫期间发生的。

你可以在某个更高级别围绕try-catch,例如。在Controller中你可以检查是否抛出了ConstraintViolationException并按照协议采取行动。

save()

之后,

或可以清除您的交易