Я использую EclipseLink в своем веб-приложении, и мне тяжело изящно ловить и обрабатывать Исключения, которые он генерирует. Я вижу из этой темы, что похоже на аналогичную проблему, но я не вижу, как ее можно обойти или исправить.
Мой код выглядит следующим образом:
public void persist(Category category) {
try {
utx.begin();
em.persist(category);
utx.commit();
} catch (RollbackException ex) {
// Log something
} catch (HeuristicMixedException ex) {
// Log something
} catch (HeuristicRollbackException ex) {
// Log something
} catch (SecurityException ex) {
// Log something
} catch (IllegalStateException ex) {
// Log something
} catch (NotSupportedException ex) {
// Log something
} catch (SystemException ex) {
// Log something
}
}
Когда persist() вызывается с сущностью, которая нарушает ограничение уникальности, я получаю взрыв исключений, которые пойманы и регистрируются контейнером.
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: The statement
was aborted because it would have caused a duplicate key value in a unique or
primary key constraint or unique index identified by 'SQL110911125638570'
defined on 'CATEGORY'.
Error Code: -1
(etc)
Я пробовал следующее:
try {
cc.persist(newCategory);
} catch (PersistenceException eee) {
// Never gets here
System.out.println("MaintCategory.doNewCateogry(): caught: " + eee);
} catch (DatabaseException dbe) {
// Never gets here neither
System.out.println("MaintCategory.doNewCateogry(): caught: " + dbe);
}
Я понимаю, что использование DataBaseException не переносимо, но мне нужно что-то начать. Исключения никогда не попадают. Любые предложения?