Получение имени поля и таблицы, вызвавших исключение, из объекта исключения SQL.

StackOverflow https://stackoverflow.com/questions/829424

Вопрос

В своем проекте я использую Hibernate JPA и Spring.Предположим, если я попытаюсь вставить запись с повторяющимся значением ключа, запрос на вставку выдаст исключение.

Теперь можно ли получить имя таблицы, имя поля и возможную причину исключения из объекта SQL Exception во время выполнения!?

Это было полезно?

Решение

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

Например, если вы пытаетесь поместить слишком большое значение в столбец, вы можете использовать это:

try {
    entityManager.persist(object);

} catch (InvalidStateException e) {

    log.info("Caught Hibernate exception: #0", e.getClass().getName());

    InvalidValue[] invalidValues = e.getInvalidValues();

    for(InvalidValue invalidValue : invalidValues) {
        log.info("Invalid Property #0 has value: #1", invalidValue.getPropertyName(), invalidValue.getPropertyName());
    }
}

Другие советы

SQLExceptions, как правило, просто оборачивают ошибки базы данных, вы можете получить такую ​​информацию, только если она была включена в ошибку, которую выдала ваша база данных.По моему опыту отладки Hibernate и JDBC, я бы рискнул сказать, что ответ на этот вопрос, как правило, «нет», но могут быть и исключения.

hibernate оборачивает SQLException как JDBCException и пытается преобразовать его в более значимое полное исключение, такое как ConstraintViolationException, используя SQLExceptionConverter, который присоединен к SessionFactory.

SQLException sqlException = ((JDBCException)ex).getSQLException(); 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top