8
votes

JPA / Hibernate Manipulation des exceptions

J'utilise jpa / hibernate (un débutant à eux). Lorsqu'une exception se produise (pourrait être une violation de contrainte unique), je veux l'attraper et montrer une application Signification des messages, au lieu d'imprimer la trace de la pile.

L'hibernate fournit-il un outil pour obtenir des informations (peut-être de la base de données indépendante) sur des exceptions?


0 commentaires

6 Réponses :


5
votes

HibernateException encapsule la cause première réelle que possible de vous fournir suffisamment d'informations pour que vous puissiez générer des messages convaincants conviviaux. Lire le Manipulation d'exception section de leur documentation.


1 commentaires

Le lien n'est plus valide.



-1
votes

Toutes les exceptions en hibernate sont des dérivés de la classe RunTimeException de Java. Donc, si vous attrapez une décomption RunTimeException dans votre code, vous pouvez récupérer la cause de l'exception en appelant les méthodes GetCause 'GetCause () ou GetMessage ()


1 commentaires

Vous devriez éviter d'attraper des exceptions générales telles que RunTimeException. Les exceptions attrapées doivent être aussi spécifiques que possible.



1
votes

Vous pouvez spécifiquement attraper org.hibernate.exception.ConstriceViolationException. De cette façon, vous savez que vous attrapez uniquement des problèmes de contrainte.


0 commentaires

3
votes

Vous pouvez soit saisir le général jdbcexception : xxx

ou vous pouvez également attraper l'une des sous-classes les plus spécifiques de jdbcepexception telle Comme contrainteViolationException ou jdbcconnectionException : xxx

et avec le e.gecause () méthode Vous pouvez récupérer le sous-jacent SQLEXception et l'analyser en outre: xxx

qui imprimerait par exemple: entrée en double 'nom userStatusername "pour la clé" Nom d'utilisateur '


0 commentaires

4
votes

Vous pouvez faire comme suit. Je l'ai fait. Mais le bien-au-delà que vous utilisez du code spécifique du fournisseur, donc si vous accédez à un fournisseur JPS différent, vous devrez changer de code à plusieurs endroits. En même temps, parfois sa pratique lorsque vous savez que vous n'allez pas changer facilement et que le message d'erreur convivial est plus important

try{
...
}

catch( javax.persistence.PersistenceException  ex)

{

     if(ex.getCause() instanceof org.hibernate.exception.ConstraintViolationException)

      {..........}

}


0 commentaires

0
votes

Vous pouvez attraper des exceptions hibernées lorsque vous souhaitez appeler flush () code> sur votre session ou commit () code> sur votre transaction.

try {
    session.getTransaction().commit();
} catch (Exception e) {
    System.out.println("Hibernate Exception: " + e.getMessage());
}
    
// or

try {
    session.flush();
} catch (Exception e) {
    System.out.println("Hibernate Exception: " + e.getMessage());
}


0 commentaires