Не удается получить исключение DataIntegrityViolationException в Spring после обновления до Hibernate Validator 4 - PullRequest
1 голос
/ 18 октября 2011

Не могу понять, почему я больше не получаю DataIntegrityViolationException после обновления с Hibernate Validator 3.X до 4.X.

Почему-то Spring больше не может переносить исключения из персистентного слоя.

Ничего не изменилось, кроме зависимости Validator, но тест, проверяющий, что DataIntegrityViolationException генерируется в случае нарушения проверки, больше не проходит. Теперь я получаю исключение javax.validation.ConstraintViolationException.

Все еще на месте, включая, конечно, но перевод больше не происходит.

Помогите добро пожаловать!

Ответы [ 2 ]

3 голосов
/ 18 октября 2011

В соответствии со спецификацией JPA-2.0 проверка JSR-303 автоматически запускается перед сохранением сущности, если в пути к классам присутствует реализация средства проверки JSR-303 (т. Е. Hibernate Validator 4.x).

Таким образом, Hibernate Validator отклоняет вашу сущность и не попадает в базу данных, поэтому ограничение целостности базы данных не нарушается и DataIntegrityViolationException не выбрасывается, а вместо этого вы получаете ConstraintViolationException в JSR-303.

Вы можете отключить это поведение по умолчанию, добавив

<validation-mode>NONE</validation-mode>

к вашему persistence.xml.

0 голосов
/ 19 октября 2011

Это поражает меня, но вы вроде как правы.

Если я отключаю проверку, я все равно получаю «проверку», и вместо получения DataIntegrityViolationException первопричины PropertyValueException яполучить org.hibernate.exception.ConstraintViolationException, даже не ожидаемый javax.validation.ConstraintViolationException

Так что, похоже, есть 2 вида проверки, включенные Hibernate Validator.Похоже, вы указываете на то, что по умолчанию при новой проверке бина включается «предварительная база данных».Но в любом случае, с или без <validation-mode>NONE</validation-mode>, мои журналы всегда показывают запросы.Возможно, они не попадают в базу данных из-за регистрации в Hibernate, но я немного растерялся из-за того, что происходит на самом деле.

В чем разница между проверкой без <validation-mode>NONE</validation-mode> и проверкой с,Ничего об этом не нашли в документе AFAIK.

...