Как я могу узнать, что уникальное ограничение было нарушено?
Исключение связано, вы должны вызвать getCause()
рекурсивно, чтобы получить исключение для конкретного провайдера (и, возможно, выйтина SQLException
), чтобы перевести его в то, что ваше приложение может хорошо обработать для вашего пользователя.Далее будет напечатана цепочка исключений:
for (t = e.getCause(); t != null; t = t.getCause()) {
logger.debug("Exception:" + t);
}
Для обработки исключений и «перевода» вы можете сделать что-то наподобие того, что делает Spring (см. Различные классы JpaDialect
, например, HibernateJpaDialect
, чтобы понять).
Все это нехорошо, этот код не будет переносимым, и поиск атрибутов, вызвавших нарушение, будет непростым делом.Это как-то подтверждает, что в JPA .
не существует
элегантного и портативного способа обработки нарушений ограничений.