Рубрики
Без рубрики

Исключение ConstraintViolationException в Spring JPA / JPA

Как найти точную причину, если вы получаете исключение constraintviolationexception в spring Jpa /jpa.

Автор оригинала: Amol Bhujbal.

Обо мне

Разработчик Java.

Почему я хотел изучить Spring JPA/JPA

потребность в проекте.

Как я подошел к изучению Spring JPA/JPA

Документация и изучение существующего кода.

Проблемы, с которыми я столкнулся

Большая часть документации spring JPA доступна на spring.сайта ввода-вывода более чем достаточно, чтобы начать работу над проектом spring jpa. Однако spring jpa использует java jpa для выполнения операций. ПРОБЛЕМА/ПРОБЛЕМА столкнулся: При попытке выполнить простую операцию “Сохранить” для объекта я начал сталкиваться с ошибкой ” javax.проверка. Исключение ConstraintViolationException”. У него была огромная трассировка стека spring jpa/jpa, но он никогда не указывал на ошибку или поле, вызывающее ошибку. В этом случае им, безусловно, необходимо улучшить ведение журнала . У меня была сложная сущность с несколькими дочерними ссылками, включающими несколько таблиц. У каждой сущности было много полей, и было невозможно проверить значение каждого поля, которое пытались сохранить. Я не был уверен, что было не так, так как операция “Сохранить” работала нормально для определенных случаев с данными и выдавала ошибку в других.

РЕШЕНИЕ : После того ,как мы некоторое время гуглили, выяснилось, что нам нужно заполнить пробелы, т. е. нам нужно проверить сохраняемый объект и самостоятельно зарегистрировать ошибку проверки в коде перед сохранением объекта.

Так чтобы получить поле/точную проблему, я изменил приведенный ниже код (вне курса для целей отладки

public void performSave(Object ObjectToSave) throws exception {
   daoObject.saveAndFlush(ObjectToSave);
 }

ТО

public void performSave(Object ObjectToSave) throws exception {
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();

    Set> constraintViolations = validator.validate(ObjectToSave);

    if (constraintViolations.size() > 0 ) {
      logger.info("VIOLATION OCCURED");
    for (ConstraintViolation contraints : constraintViolations) {
    logger.info(contraints.getRootBeanClass().getSimpleName()+
        "." + contraints.getPropertyPath() + " " + contraints.getMessage());
      }
    }
    daoObject.saveAndFlush(ObjectToSave);
  }

Теперь вызвал метод с теми же данными и Ух ты ! Я получил сообщение об ошибке. Было одно поле, для которого ограничение БД не было нулевым, но исходило как нулевое из пользовательского интерфейса . Исправлено и я могу сохранить объект. Овации.

Ключевые выводы

1.) Не всегда ваш код неверен, иногда также могут возникнуть проблемы с данными. 2.) Лучшая отладка/ведение журнала всегда помогут.

Советы и рекомендации

Spring JPA помогает сократить стандартный код. Запросы генерируются динамически, просто записывая имена полей в требуемом формате. т. е. findByFirstName или Порядок findByFirstName по фамилии и т. Д.

Заключительные мысли и следующие шаги

Оригинал: “https://www.codementor.io/@amolbhujbal53/constraintviolationexception-in-spring-jpa-jpa-e0utg66i6”