Есть ли способ выяснить (во время выполнения), какая сущность вызвала ConstraintViolationException? - PullRequest
1 голос
/ 03 ноября 2011

У меня есть приложение (REST), которое обрабатывает операции CRUD, инициированные третьей стороной, и в основном моя проблема заключается в возврате понятного сообщения об ошибке в случае нарушения ограничения.Я использую Hibernate (хотя решения JPA были бы лучше), и создаваемое им исключение ConstraintViolationException не очень полезно, у него даже нет имени нарушенного ограничения.До сих пор я возвращал constraintViolation.getSQLException().getMessage(), который возвращает наполовину приличное сообщение в соответствии с Duplicate entry '<value>' for key 2.

Проблема заключается в новом требовании, чтобы улучшить возвращаемую ошибку, включив в нее , которая сущность не смогла зафиксировать, а также значение (и какой это был сбой в виде пользовательского кода ошибки; DUPLICATE_VALUE, MISSING_FOREIGN_KEY или что-то в этом роде).Поскольку приведенная выше строка взята из SQLException, я предполагаю, что это зависит от БД / драйвера, поэтому я могу выбрать '' из этой строки и выполнить поиск по каждому полю в каждом объекте, который я только что совершил, чтобы попытаться найтиправильный вариант - это не совсем надежный вариант (тем более что нам нужно поддерживать несколько баз данных).

Так есть ли способ найти эту информацию на основе имеющейся информации?(Который в основном является исключением ConstraintViolationException с SQLException и объектом, который я пытался сохранить).

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Вот почему вы должны проверять предоставленные данные в бизнес-логике, а не полагаться на Hibernate.Веб-фреймворки предоставляют механизмы проверки именно по этой причине.

0 голосов
/ 03 ноября 2011

Должна быть возможность конкретно зафиксировать это исключение и вернуть значимый ответ вместо общих исключений и проанализировать его, чтобы понять, стоит попытаться повторно его учесть.только мои 2с

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