Tratamento de exceção do EntityManager no bean de sessão

Eu tenho um bean de sessão stateless gerenciado com o EntityManager in injetado.

O que estou tentando fazer é ter uma tabela de banco de dados com coluna exclusiva. Então eu corro algum algoritmo que está tentando inserir uma entidade. Se a entidade existir, no entanto, ela será atualizada ou ignorada.

Eu gostaria de ter algo assim:

try {   
em.persist(cd);     
em.flush();     
} catch (PersistenceException e) {  
// Check if the exception is DatabaseException and ConstraintViolation
    // Update instead or skip it
}

O problema é que eu sou capaz de pegar apenasPersistenceException. DatabaseException não está preso. É triste porque sóDatabaseException tem método chamadogetDatabaseErrorCode() Eu gostaria de usar para verificar a entrada duplicada. Eu não entendo porquePersistenceException.getCause() devolveDatabaseException.

Então minha pergunta é: como eu pegoDatabaseException e verifique o código de erro do MySQL?

Obrigado por quaisquer ideias e experiências com isso.

questionAnswers(1)

yourAnswerToTheQuestion