Comment attraper, enveloppement et de re-jeter un Hibernate exceptions?
Ma base de données travailleur est mis en œuvre au-dessus de la veille prolongée. Si quelque chose va mal, c'est des méthodes d'annuler la transaction et de jeter un SQLException
. Donc ma question est: quel est le meilleur (c'est à dire la plus propre) la poignée de manière Hibernate exceptions? Actuellement, tous mes méthodes regarde aussi laid que cela:
public EntryUserHib addUser(final String username, final String pwdhash) throws SQLException{
try {
final Transaction ta = sess.beginTransaction();
try {
//Using Hibernate here
//"return" statement
} catch(final HibernateException ex) {
try {
ta.rollback();
} catch(final Exception ex1) {}
throw ex;
} finally {
if (!ta.wasRolledBack()) ta.commit();
}
} catch(final HibernateException ex) {
if (ex.getCause() != null) {
if (ex.getCause() instanceof SQLException) throw (SQLException)ex.getCause();
throw new SQLException(ex.getCause());
}
throw new SQLException(ex);
}
}
OriginalL'auteur Alex Abdugafarov | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Laisser quelqu'un d'autre gérer pour vous, comme le Printemps. Il a vaste Hibernate et le support des transactions qui va extraire tous les, de ce code, que vous êtes inquiet au sujet de.
C'est une idée fausse commune que le Printemps est "seulement" un cadre. Il a des tonnes de bibliothèques réutilisables emballé. Par exemple, votre situation, il propose un TransactionTemplate et un HibernateTemplate (en lien précédemment) qui font exactement ce que vous demandez. Oui, vous pouvez écrire vous-même, mais pourquoi?
OriginalL'auteur Ryan Stewart
Ne pas les attraper. Hibernate exceptions étendre RuntimeException pour deux bonnes raisons: vous n'avez pas à les déclarer dans les signatures de méthode, et tout RuntimeException provoque automatiquement un rollback de la transaction. Gestion des exceptions est très encombré code. Hibernate gens ont de la philosophie qui HibernateExceptions devrait être fatales erreurs, de signalisation de codage ou des erreurs de logique, et dans la fonction de demande ne doit pas être (et n'a pas besoin de l'être) pris.
De votre application, l'INTERFACE utilisateur doit répondre à ces surprises dans une manière conviviale. C'est une question distincte.
DatabaseWorker
- l'utilisation d'Hibernate, JDBC et simple dans le modèle de mémoire pour les tests, et actuellement je peut passer librement de l'un d'eux.HibernateException wrapps un tas d'autres exception inc SQLException, ce peut être un réseau de pépin, pas nécessairement de codage ou de la logique, peut ou peut ne pas être mortel en fonction de votre application. Dans un serveur de situation il n'y a généralement rien de "fatal" à propos d'un HibernateException, il doit généralement être pris et delt avec et le serveur doit continuer.
OriginalL'auteur RichW