Как мне поймать исключение о нарушении ограничений из EclipseLink?

Я использую 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
    }
}

При вызове remain() сущности, нарушающей ограничение уникальности, я получаю взрыв исключений, которые перехватываются и протоколируются контейнером.

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 не переносится, но мне нужно с чего-то начать. Исключения никогда не попадаются. Есть предложения?

12
задан Community 23 May 2017 в 11:46
поделиться