Violação de restrição do banco de dados não lançando exceção no Hibernate

Eu tenho o seguinte código:

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

userDAO1.save (userRecord) viola uma restrição de integridade - portanto, após a execução do código inteiro, não há nada gravado na tabela a que userDAO1 se refere.

No entanto, a instrução userDAO1.save () não gera um erro / exceção - portanto, userDAO2.save () também é executado.

Mas o DataIntegrityViolationException é capturado e orastreamento de pilha é nulo.

Como verifico de onde a DataIntegrityViolationException é lançada e evito que o userDAO2.save () seja executado se userDAO1.save () viola uma restrição?

Tentei adicionar uma anotação @Transactional em torno desse código, mas isso também não funcionou.

Rastreio de pilha:

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)

O código que eu publiquei está em UpdateUserCommand, que é anotado com@Transactional(rollbackFor=Exception.class, propagation=Propagation.REQUIRES_NEW)

questionAnswers(2)

yourAnswerToTheQuestion