Manejo de excepciones de EntityManager en el bean de sesión

Tengo un bean de sesión sin estado gestionado con EntityManager inyectado.

Lo que estoy tratando de hacer es tener una tabla de base de datos con una columna única. Luego ejecuto un algoritmo que intenta insertar una entidad. Si la entidad existe, sin embargo, la actualizará o la omitirá.

Me gustaría tener algo como esto:

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

El problema es que soy capaz de atrapar soloPersistenceException. DatabaseException no es atrapado Es triste porque soloDatabaseException tiene método llamadogetDatabaseErrorCode() Me gustaría usar para comprobar la entrada duplicada. No lo entiendo porquePersistenceException.getCause() devolucionesDatabaseException.

Así que mi pregunta es: ¿Cómo atrapo?DatabaseException y verifique el código de error de MySQL?

Gracias por cualquier idea y experiencia con esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta