У меня настроен ControllerAdvice с двумя обработчиками исключений; один для любого исключения Hibernate (HibernateException.class) и один для любого другого исключения Runtime (RuntimeException.class)
@ExceptionHandler(HibernateException.class)
public String handleHibernateException(HibernateException exc, Model theModel) {
String message = "An error has occured: " + exc.getLocalizedMessage() + "\r\n";
myLogger.warning(message);
theModel.addAttribute("exception", message);
return "testing";
}
@ExceptionHandler(RuntimeException.class)
public String handleRuntimeExceptions(RuntimeException exc, Model theModel) {
if (exc instanceof HibernateException) {
return handleHibernateException((HibernateException) exc.getCause(), theModel);
}
String message = "An error has occured: " + exc.getLocalizedMessage() + "\n"
+ exc.getCause().getCause().toString() + "\r\n";
myLogger.warning(message);
theModel.addAttribute("exception", message);
return "testing";
Я проверяю это, путая мои операторы запроса, что дает мне QuerySyntaxException; подкласс HibernateException. И все же, он все еще обрабатывается моим методом исключения времени выполнения.