Рассмотрим гипотетический User
таблицу:Обработка кодов ошибок Hibernate?
-- postgres, but it could have been any other SQL database
CREATE TABLE User(
id SERIAL PRIMARY KEY,
mail VARCHAR(32) UNIQUE NOT NULL
);
Давайте предположим, что я пытаюсь добавить двух пользователей с той же почтой:
session.save(new User(1, "[email protected]"));
session.save(new User(2, "[email protected]"));
и выполнить его через Hibernate. Hibernate бросит мне ConstraintViolationException
:
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129)
...
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "users_mail_key"
Detail: Key (mail)=([email protected]) already exists.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2198)
...
То, что я хотел бы знать, если есть какой-то хороший способ, кроме того, чтобы вручную разобрать выходной текст, за исключением, в к соберите причину ошибки, чтобы я мог правильно интерпретировать и реагировать на проблему.
Я понимаю, что на самом деле это может быть скорее проблема драйвера Postgres, чем на самом деле Hibernate, но я не уверен на этом этапе, поэтому я подумал, что может быть удобно спросить в контексте Hibernate.
Можете ли вы проверить тип исключения (ConstraintViolationException)? Предоставляет ли это достаточную информацию для вас? – STLDeveloper
я сделал. Из того, что я собрал, даже во внутреннем исключении, ничего полезного не найдено. Вот почему я сказал, что, может быть, проблема может заключаться в том, что драйвер Postgres не может быть очень информационным. Возможно, с другими драйверами для других БД этого не происходит. –
Что он возвращает, если вы вызываете getErrorCode и getSQLState для этого исключения из Postgresql Driver? –