我的数据库工作是在Hibernate之上实现的。如果发生错误,它的方法应该回滚事务并抛出SQLException
。所以我的问题是:处理Hibernate异常的最佳(即最干净)方法是什么?目前,我所有的方法看起来都像这样丑陋:
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);
}
}
DatabaseWorker
有三种实现方式 - 使用Hibernate、JDBC和简单的内存模型进行测试,目前我可以自由切换它们。 - Alex Abdugafarov