Преобразование PersistenceException в DataAccessException весной - PullRequest
6 голосов
/ 25 февраля 2011

Я пытаюсь обработать уникальные нарушения ключевых ограничений в среде Spring + JPA + Hibernate.

Я использую PersistenceExceptionTranslationPostProcessor для перевода PersistenceException в DataAccessException. Когда есть нарушение уникального ключевого ограничения, я бы ожидал бросок DuplicateKeyException или DataIntegrityViolationException, но все, что я получаю, это JpaSystemException, который оборачивает PersistenceException.

Не является ли смысл использования иерархии DataAccessException в том, что она достаточно детализирована, чтобы не искать специфический для поставщика код ошибки?

Как мне заставить Spring перевести PersistenceException на более конкретный DataAccessException?

РЕДАКТИРОВАТЬ: я заметил, что this.jpaDialect в DataAccessUtils.translateIfNeeded () является нулевым. Есть ли какие-то настройки, которые мне нужно настроить, чтобы установить this.jpaDialect в HibernateJpaDialect?

Спасибо!

1 Ответ

9 голосов
/ 26 февраля 2011

Очевидно, у вас не установлено jpaDialect.Для Hibernate это должно выглядеть так:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
    </property>
    <!-- ... -->
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...