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.