如何处理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
答案 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()
之后,或可以清除您的交易