Obsługa wyjątków EntityManager w komponencie bean sesji

Mam zarządzany bezstanowy komponent bean sesji ze wstrzykniętym em entityManager em.

Próbuję zrobić tabelę bazy danych z unikalną kolumną. Następnie uruchamiam jakiś algorytm, który próbuje wstawić obiekt. Jeśli jednostka istnieje, zaktualizuje ją lub pominie.

Chciałbym mieć coś takiego:

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

Problem polega na tym, że jestem w stanie złapać tylkoPersistenceException. DatabaseException nie jest złapany. To smutne, bo tylkoDatabaseException ma metodę zwanągetDatabaseErrorCode() Chciałbym użyć do sprawdzenia zduplikowanego wpisu. Nie rozumiem tego, ponieważPersistenceException.getCause() zwracaDatabaseException.

Moje pytanie brzmi: jak złapaćDatabaseException i sprawdź kod błędu MySQL?

Dziękujemy za wszelkie pomysły i doświadczenia z tym związane.

questionAnswers(1)

yourAnswerToTheQuestion