Исключения Hibernate продолжают обрабатываться RuntimeException.class, а не HibernateException.class - PullRequest
0 голосов
/ 05 мая 2019

У меня настроен 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. И все же, он все еще обрабатывается моим методом исключения времени выполнения.

1 Ответ

0 голосов
/ 05 мая 2019

Я думаю, что @ExceptionHandler точно совпадает с именем Exact Exception, которое является QuerySyntaxException. Не могли бы вы попробовать поместить QuerySyntaxException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...