JPA, Hibernate - обработка ContraintViolationException, заключенного в RollbackException - PullRequest
3 голосов
/ 24 июля 2011

У меня проблемы с обработкой ConstraintViolationException и RollbackException в среде JPA2 / Hibernate / Guice. Оба исключения происходят во время проверки бина, но:

ConstraintViolationException выбрасывается, когда я пытаюсь сохранить новую сущность

RollbackException происходит, когда я пытаюсь объединить сущность в контекст

Это происходит, когда обработка формы (создание и обновление сущностей) и отлов этих исключений утомительны:

try {
    // service.method is annotated with @Transactional
    entity = service.create(formEntity);
} catch (RollbackException re) {
    // occurs while merging the entity
    if (re.getCause() instanceof ConstraintViolationException) {
        errors.process((ConstraintViolationException) re.getCause());
    }
} catch (ConstraintViolationException cve) {
    // occurs while persisting the entity
    errors.process(cve);
}

Я не хотел бы добавлять еще один поток управления и перехватывать все RuntimeException s:

try {
    // bean validation fails (merge / persist)
} catch (RuntimeException ex) {
    if (errors.process(ex)) {
        // do something with entity
    }
}

Можно ли как-то заставить Hibernate не включать CVE в RE? Какой самый прозрачный и СУХОЙ способ обработки и обработки таких исключений?

Спасибо

1 Ответ

0 голосов
/ 24 июля 2011

hibernate оборачивает все исключения sql как RuntimeException (особенность hibernate) .. вы получаете ConstraintViolationException, вероятно, потому что есть какое-то поле, которое не принимает нули, и вы передаете нулевое значение во время insert .. (если вы явно не устанавливаете значение свойства pojo, которое при вставке считается нулевым) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...