Обработка исключений EntityManager в сессионном компоненте
У меня есть управляемый сессионный компонент без сохранения состояния с внедренным EntityManager em.
Я пытаюсь создать таблицу базы данных с уникальным столбцом. Затем я запускаю некоторый алгоритм, который пытается вставить объект. Однако, если сущность существует, она обновит ее или пропустит.
Я хотел бы иметь что-то вроде этого:
try {
em.persist(cd);
em.flush();
} catch (PersistenceException e) {
// Check if the exception is DatabaseException and ConstraintViolation
// Update instead or skip it
}
Проблема в том, что я могу ловить толькоPersistenceException
. DatabaseException
не ловится. Это печально, потому что толькоDatabaseException
имеет метод называетсяgetDatabaseErrorCode()
Я хотел бы использовать для проверки дублирования записи. Я не понимаю этого, потому чтоPersistenceException.getCause()
возвращаетсяDatabaseException
.
Итак, мой вопрос: как я могу пойматьDatabaseException
и проверить код ошибки MySQL?
Спасибо за любые идеи и опыт с этим.