Нарушение ограничения БД не вызывает исключение в Hibernate

У меня есть следующий код:

try {
    userDAO1.save(userRecord);
    userDAO2.save(userRecord);
}
catch(DataIntegrityViolationException e) {
    throw new ApplicationException("Contraint violated")
}

userDAO1.save (userRecord) нарушает ограничение целостности - поэтому после выполнения всего кода ничего не записывается в таблицу, на которую ссылается userDAO1.

Однако инструкция userDAO1.save () не выдает ошибку / исключение - поэтому также выполняется userDAO2.save ().

Но перехватывается DataIntegrityViolationException, итрассировка стека равна нулю.

Как проверить, откуда выбрасывается исключение DataIntegrityViolationException, и предотвратить выполнение userDAO2.save (), если userDAO1.save () нарушает ограничение?

Я попытался добавить аннотацию @Transactional вокруг этого кода, но это тоже не сработало.

Трассировки стека:

org.springframework.dao.DataIntegrityViolationException: ORA-00001: unique constraint (UNIQUE_EMAIL) violated
; SQL [n/a]; constraint [UNIQUE_EMAIL]; nested exception is org.hibernate.exception.ConstraintViolationException: ORA-00001: unique constraint (UNIQUE_EMAIL) violated

    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:643)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104)
    at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:516)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at com.sun.proxy.$Proxy76.updateUser(Unknown Source)
    at com.osiris.UserReg.UpdateUserCommand.execute(UpdateUserCommand.java:63)

Код, который я разместил, находится в UpdateUserCommand, который аннотируется@Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRES_NEW)

Ответы на вопрос(2)

Ваш ответ на вопрос