Comment puis-je reprendre la violation de la contrainte exception de EclipseLink?

Je suis en utilisant EclipseLink dans mon application web, et je vais avoir un moment difficile avec élégance la capture et la gestion des Exceptions qu'elle génère. Je vois de ce fil ce qui semble être un problème similaire, mais je ne vois pas comment contourner ou de le réparer.

Mon code ressemble à ceci:

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
    }
}

Quand persist() est appelée avec une entité qui viole une contrainte d'unicité, je reçois une explosion des exceptions qui sont capturés et enregistrés par le conteneur.

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)

J'ai essayé ce qui suit:

    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);            
    }

Je me rends compte que l'utilisation de DataBaseException n'est pas portable, mais j'ai besoin de commencer quelque part. Les exceptions ne jamais se laisser prendre. Des suggestions?

que faut-il dire par "DataBaseException n'est pas portable"? Merci!
Le DataBaseException classe est définie par org.eclipse, pas la spécification JPA. Donc, ce n'aurions probablement pas travailler (ou même de la compilation) avec un autre fournisseur JPA.

OriginalL'auteur AlanObject | 2011-09-12