У меня есть приложение (REST), которое обрабатывает операции CRUD, инициированные третьей стороной, и в основном моя проблема заключается в возврате понятного сообщения об ошибке в случае нарушения ограничения.Я использую Hibernate (хотя решения JPA были бы лучше), и создаваемое им исключение ConstraintViolationException не очень полезно, у него даже нет имени нарушенного ограничения.До сих пор я возвращал constraintViolation.getSQLException().getMessage()
, который возвращает наполовину приличное сообщение в соответствии с Duplicate entry '<value>' for key 2
.
Проблема заключается в новом требовании, чтобы улучшить возвращаемую ошибку, включив в нее , которая сущность не смогла зафиксировать, а также значение (и какой это был сбой в виде пользовательского кода ошибки; DUPLICATE_VALUE, MISSING_FOREIGN_KEY или что-то в этом роде).Поскольку приведенная выше строка взята из SQLException, я предполагаю, что это зависит от БД / драйвера, поэтому я могу выбрать '' из этой строки и выполнить поиск по каждому полю в каждом объекте, который я только что совершил, чтобы попытаться найтиправильный вариант - это не совсем надежный вариант (тем более что нам нужно поддерживать несколько баз данных).
Так есть ли способ найти эту информацию на основе имеющейся информации?(Который в основном является исключением ConstraintViolationException с SQLException и объектом, который я пытался сохранить).