gpt4 book ai didi

java - 如何正确捕获、包装和重新抛出 Hibernate 异常?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:54:09 24 4
gpt4 key购买 nike

我的数据库worker是在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);
}
}

最佳答案

根本不要捕获它们。 Hibernate 异常扩展 RuntimeException 有两个很好的理由:您不必在方法签名中声明它们,并且任何 RuntimeException 都会自动导致事务回滚。异常处理导致代码非常困惑。 Hibernate 人员的理念是 HibernateExceptions 应该是 fatal error 、信号编码或逻辑错误,并且在正常运行的应用程序中不应该(也不需要)被捕获。

不过,您的应用程序的 UI 应该以用户友好的方式响应这些意外情况。这是一个单独的问题。

关于java - 如何正确捕获、包装和重新抛出 Hibernate 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com