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. P>
L'hibernate fournit-il un outil pour obtenir des informations (peut-être de la base de données indépendante) sur des exceptions? P>
6 Réponses :
HibernateException
Le lien n'est plus valide.
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 () P>
Vous devriez éviter d'attraper des exceptions générales telles que RunTimeException. Les exceptions attrapées doivent être aussi spécifiques que possible.
Vous pouvez spécifiquement attraper org.hibernate.exception.ConstriceViolationException. De cette façon, vous savez que vous attrapez uniquement des problèmes de contrainte. P>
Vous pouvez soit saisir le général ou vous pouvez également attraper l'une des sous-classes les plus spécifiques de et avec le qui imprimerait par exemple: jdbcexception code>:
jdbcepexception code> telle Comme
contrainteViolationException code> ou
jdbcconnectionException code>: p>
e.gecause () code> méthode Vous pouvez récupérer le sous-jacent
SQLEXception CODE> et l'analyser en outre: p>
entrée en double 'nom userStatusername "pour la clé" Nom d'utilisateur ' code> p> p>
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) {..........} }
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());
}