Автор оригинала: 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”