Извлечь имя поля, вызывающее ConstraintViolationException
Как я могу получить имя поля, вызывающее org.hibernate.exception.ConstraintViolationException
? Единственный верный способ проверить уникальное ограничение - это фиксация транзакции, поэтому даже если я проверю его до того, как может быть сгенерировано исключение Поэтому мне нужно сообщить пользователю поле ведьмы, вызывающее проблему сохранения.
Подробное сообщение является более или менее техническим и неприемлемым для пользователя. Это также зависит от драйвера базы данных:(Имена поля IMO достаточно, проблемное значение, которое я могу получить из объекта. Также другую информацию, которую я могу подготовить... кроме имени поля.
1 ответ
Вы не можете получить исключение и сообщение по его причине, как это:
try{
t.commit();
}catch (ConstraintViolationException e) {
e.getCause().getMessage();//
}
что даст вам результат, как это [SQL0407] Null values not allowed in column or variable GROUP00002.
последнее слово - это имя вашего столбца, и вы можете перевести его, чтобы оно соответствовало вашему полю (возможно, с использованием статического HashMap).