在DAO层中捕获泛型异常是一种不好的做法吗?

时间:2017-06-22 03:19:45

标签: java exception

我在DAO类中捕获泛型异常并将其包装到DaoException中。这样做的主要原因是,EBean在保存失败的情况下抛出不同的运行时异常,我不想将它们传播到上层。上层应该只知道保存是否成功。

以下是代码段。

   public void save(Object object) throws DaoException {
        try {
            Ebean.save(object);
        } catch (Exception e) {
            throw new DaoException("Error saving record", e);
        }
    }

这违背了不应该捕获一般异常的一般概念。

但是在这种情况下这是否可以接受或者仍然是一种不好的做法?

我的问题还有很多东西需要补充。 我的确切要求是

  1. 我需要在事务中保留一组独立的对象。 (需要在事务中执行此操作以避免其他实例同时对同一对象进行更改)

  2. 如果一个对象由于某些错误而无法持久化,则还需要保留其他对象。 (Cz他们是独立的)

  3. 我在服务层中所做的是循环对象集。如果我从一个对象收到DaoException,我将其添加到错误响应中并仍然继续循环。但它不应该打破交易。 有没有更好的方法来达到这个要求?

1 个答案:

答案 0 :(得分:1)

在异常处理中,要遵循的拇指规则是:提前抓取,稍后处理。

在Dao层中,如果要在发生任何特定类型的Excepion时采取任何操作,则必须捕获特定的异常而不是通用的Exception类。

例如:使用spring jdbc时,我们可以捕获各种类型的exceptions 因此我们可以采取行动,比如执行该数据库操作的重试或等待一段时间来获取任何锁。

但是,如果您在异常情况下不需要在Dao图层中进行任何处理,那么您最好在外部类中处理该异常。