Как поймать sqlException или сигнальное сообщение от триггера mysql

Я хочу поймать сообщение триггера из базы данных mysql и распечатать его с помощью моего шаблона тимелеафт, но я столкнулся с проблемой с улавливанием сообщения этого триггера

часть хранилища домашних животных

 void save(Pet pet) throws SQLException;

это часть контроллера, метод отлова не работает и я не знаю, как это сделать правильно

   @PostMapping("/pets/new")
    public String processCreationForm(Owner owner, @Valid Pet pet, BindingResult result, ModelMap model) {
        if (StringUtils.hasLength(pet.getName()) && pet.isNew() && owner.getPet(pet.getName(), true) != null){
            result.rejectValue("name", "duplicate", "already exists");
        }
        owner.addPet(pet);
        if (result.hasErrors()) {
            model.put("pet", pet);
            return VIEWS_PETS_CREATE_OR_UPDATE_FORM;
        } else {
            try {
                this.pets.save(pet);
            }catch (SQLException e){


                System.out.println("mamamamam"+e.getSQLState());
            }
            return "redirect:/owners/{ownerId}";
        }
    }

ошибки:

2018-11-19 23:26:24.025  WARN 4532 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1644, SQLState: 45000
    2018-11-19 23:26:24.025 ERROR 4532 --- [nio-8080-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper   : Za duzo zwierzat
    2018-11-19 23:26:24.040 ERROR 4532 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement] with root cause

    java.sql.SQLException: Za duzo zwierzat

это соответствующая часть триггера mysql (триггер работает)

if (ilosc_zwierzat>1)
     then 
     signal sqlstate '45000' SET MESSAGE_TEXT = 'Za duzo zwierzat';          

     end if;

Я пытался сделать это таким образом, но это не сработало (у меня на странице много текста с ошибками).

 @ExceptionHandler(SQLException.class)
    public ModelAndView handleError(HttpServletRequest req, Exception ex) {

        System.out.println("WIADMOSCcccccccccccccccccc"+ex.getMessage());
        ModelAndView mav = new ModelAndView("error2");
        mav.addObject("er", ex.getMessage());
        mav.addObject("url", req.getRequestURL());
        mav.setViewName("error2");
        return mav;
    }

Очевидно, опубликованный код не улавливает исключение, трассировка стека, похоже, не перечисляет контроллер. это с помощью open-session-in-view? где границы сделки? помните, что Hibernate использует отложенную запись транзакций, поэтому SQL не запускается, пока не произойдет сброс или фиксация. Рассмотрите возможность использования сервисов, см. Уровень обслуживания и контроллер: кто о чем заботится?

Nathan Hughes 19.11.2018 23:50
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
426
1

Ответы 1

Что ж, поскольку это старый вопрос, я знаю ответ. Я просто должен Spring JDBC, чтобы получить больший контроль над обработкой sqlexception, если я использую JPA, он обрабатывает ошибку для меня, поэтому не то, что я хотел

Другие вопросы по теме