在hibernate中saveOrUpdate之后返回结果标志的最佳做法?

时间:2010-03-11 03:55:13

标签: java hibernate

通常我们必须使用一些不返回任何有用的方法。如果我在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层或服务层中捕获异常吗?

4 个答案:

答案 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)

我认为你根本不应该包装这个方法。只要使用它,请记住,如果出现错误,您将有例外。