首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaEE EntityManager异常处理

JavaEE EntityManager异常处理
EN

Stack Overflow用户
提问于 2017-02-17 17:52:03
回答 1查看 2.5K关注 0票数 0

我正在处理我的DAO,不知道处理异常的最佳方法是什么。在使用.persist()时,可以发出三个异常: EntityExistsException / IllegalArgumentException / TransactionRequiredException。

我只是想知道捕获和抛出异常的最佳方法是什么(我想在更高的级别上处理它)。

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

第一个方法是捕获异常并抛出它:

代码语言:javascript
复制
public void addAccount(final Account accountToAdd) throws AccountJpaException {

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

  }
}

第二种方法:我把它们分别抓起来。

代码语言:javascript
复制
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);
    }

  }
}

谢谢你的建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-17 19:25:45

大多数N层应用程序在服务类上指定一些事务边界.在这里捕获这些类型的异常并在这里抛出特定于用例的异常将更合适,而不是将此逻辑处理推到DAO。

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

如果我们采用第二种方法,您将捕获这些异常,并从DAO中抛出一些超级泛型异常来捕获这些异常,并在服务级别重新抛出一个更细粒度的异常,这是过分的。

我的经验法则是在服务/域级别捕捉这些类型的情况,从那里传播特定领域的异常,并根据需要在控制器中处理这些异常,可能是通过一些特定的错误处理程序来显示基于异常类型的适当的网页视图,等等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42304428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档