通常我们必须使用一些不返回任何有用的方法。如果我在hibernate中调用saveOrUpdate(),我不知道它是否已成功执行。 我使用这样的实现(我觉得有点尴尬):
public int saveOrUpdateA(A a) {
int resultFlag = 0 ;
try {
// obtaining session is omitted
session.saveOrUpdate(a);
resultFlag = 1 ;
} catch (Exception e) {
e.printStackTrace();
}
return resultFlag ;
}
你是怎么做到的?有什么好主意吗?
应该在DAO层或服务层中捕获异常吗?
答案 0 :(得分:2)
为什么你需要在这里退货?如果碰巧不成功,那就有例外情况告诉你。
如果您的调用方法需要某些东西,您可以这样做。
public void saveOrUpdateA(A a) throws Exception{
// obtaining session is omitted
session.saveOrUpdate(a);
}
答案 1 :(得分:2)
缺少例外是成功指标。
如果你真的想要指标,我会去布尔返回。
public boolean saveOrUpdateA(A a) {
boolean success = false;
try {
// obtaining session is omitted
session.saveOrUpdate(a);
success = true;
} catch (Exception e) {
// log it and swallow exception
// calling code has to be sure to check on success flag;
// otherwise it has no idea something went terribly wrong
}
return success ;
}
您的应用程序仍然必须检查返回状态并正确处理它,这与处理session.saveOrUpdate()引发的潜在异常并不完全不同。
public void saveOrUpdateA(A a) throws Exception {
try {
// obtaining session is omitted
session.saveOrUpdate(a);
} catch (Exception e) {
// log it and rethrow; let calling code figure how to handle
throw e;
}
}
答案 2 :(得分:0)
代码的问题在于您不会冒泡异常。我们倾向于遵循的规则是:如果存在异常,请将其抛出。如果没有异常,那么它已成功完成。
答案 3 :(得分:0)
我认为你根本不应该包装这个方法。只要使用它,请记住,如果出现错误,您将有例外。