Извлечь имя поля, вызывающее 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).

Другие вопросы по тегам