Получение поля и имени таблицы, вызвавшей исключение из объекта исключения SQL - PullRequest
1 голос
/ 06 мая 2009

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

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

Ответы [ 3 ]

1 голос
/ 06 мая 2009

Как уже упоминалось в других ответах, большую часть времени вы ограничены тем, что вам дает база данных. Однако в некоторых случаях 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());
    }
}
1 голос
/ 06 мая 2009

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

0 голосов
/ 06 мая 2009

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

SQLException sqlException = ((JDBCException)ex).getSQLException(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...