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