繁体   English   中英

JavaEE EntityManager异常处理

[英]JavaEE EntityManager exception handling

我正在DAO上工作,无法弄清楚处理异常的最佳方法是什么。 使用.persist()时,可以发出3个异常:EntityExistsException / IllegalArgumentException / TransactionRequiredException。

我只是想知道捕获和引发异常的最佳方法是什么(我想在更高层次上进行处理)。

我应该捕获并抛出一个简单的异常,还是单独捕获上述异常更有效?

第一种方法,我只是捕获异常并将其抛出:

public void addAccount(final Account accountToAdd) throws AccountJpaException {

    try {
        em.persist(accountToAdd);
    } catch (Exception e) {
        throw new AccountJpaException(e);
    }

  }
}

第二种方法:我分别抓捕每个人

public void addAccount(final Account accountToAdd) throws AccountJpaException, AccountExistsException {

    try {
        em.persist(accountToAdd);
    } catch (EntityExistsException e) {
        throw new AccountExistsException(e);
    }catch(IllegalArgumentException e){
        throw new AccountJpaException(e);
    }catch(TransactionRequiredException e){
        throw new AccountJpaException(e);
    }

  }
}

感谢您的建议!

大多数N层应用程序在服务类上指定一些事务边界。 在那里捕获这些类型的异常并在这里引发用例特定的异常比将这种逻辑处理下推到DAO更为合适。

现在考虑两个不同的服务类实现使用DAO方法。 可以想象它们解决了您的业务领域中的不同问题,因此要抛出的异常应该更加针对特定领域。

如果我们采用第二种方法,那么您将捕获这些异常并从DAO中抛出一些超级通用异常,而仅是捕获这些异常并在服务级别上重新抛出更细粒度的异常,这是过大的了。

我的经验法则是在服务/域级别捕获这些类型的案例,从那里传播特定于域的异常,并根据需要在控制器中处理这些异常,也许是通过某些特定的错误处理程序,该异常处理程序根据异常显示了适当的网页视图类型等

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM