我在DAO类中捕获泛型异常并将其包装到DaoException中。这样做的主要原因是,EBean在保存失败的情况下抛出不同的运行时异常,我不想将它们传播到上层。上层应该只知道保存是否成功。
以下是代码段。
public void save(Object object) throws DaoException {
try {
Ebean.save(object);
} catch (Exception e) {
throw new DaoException("Error saving record", e);
}
}
这违背了不应该捕获一般异常的一般概念。
但是在这种情况下这是否可以接受或者仍然是一种不好的做法?
我的问题还有很多东西需要补充。 我的确切要求是
我需要在事务中保留一组独立的对象。 (需要在事务中执行此操作以避免其他实例同时对同一对象进行更改)
如果一个对象由于某些错误而无法持久化,则还需要保留其他对象。 (Cz他们是独立的)
我在服务层中所做的是循环对象集。如果我从一个对象收到DaoException,我将其添加到错误响应中并仍然继续循环。但它不应该打破交易。 有没有更好的方法来达到这个要求?
答案 0 :(得分:1)
在异常处理中,要遵循的拇指规则是:提前抓取,稍后处理。
在Dao层中,如果要在发生任何特定类型的Excepion时采取任何操作,则必须捕获特定的异常而不是通用的Exception类。
例如:使用spring jdbc时,我们可以捕获各种类型的exceptions 因此我们可以采取行动,比如执行该数据库操作的重试或等待一段时间来获取任何锁。
但是,如果您在异常情况下不需要在Dao图层中进行任何处理,那么您最好在外部类中处理该异常。