处理存储库层中的异常

时间:2017-04-04 22:36:44

标签: java exception

执行JUnit Mock测试时,此代码失败。方法定义中的异常(NoResultException,PersistenceException)与方法实际返回的异常(UnknownEntityException,ServiceException)不匹配。这只是一个明显的错误吗?

应该创建项目异常(UnknownEntityException,ServiceException),以便有一种处理异常的常用方法。原始代码的创建者早已不复存在,我无法确定这是否是一个好主意。

@Repository
public class InstitutionRepository {

    @PersistenceContext
    private EntityManager entityManager;

    public EntityInstitutionModel findInstitutionByName(String instName) 
            throws NoResultException, PersistenceException {        
        try {
            Query query = null;
            query = entityManager.createQuery("SELECT ex from EntityInstitutionModel ex where ex.instname = :instName");
            query.setParameter("instName", instName);

            EntityInstitutionModel instModel = (EntityInstitutionModel) query.getSingleResult();

            System.out.println("InstitutionRepository.findInstitutionByName.getId() = " + instModel.getId());

            return instModel;

        }catch (NoResultException e) {
            throw new UnknownEntityException(e);
        } catch (Exception e) {
            throw new ServiceException(e);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这里没有错误;例外PersistenceExceptionNoResultException都是运行时异常,这意味着他们不要需要被声明,因此,即使他们不是'&n;抛出,无论如何都会允许代码编译。

我的建议是从您的方法中删除throws条款,因为这只会使您作为维护者感到困惑和沮丧。

(另外,如果你最后可以对catch Exception做一些事情,那也很好;不想去捕捉你真的不应该做的事情。那里。)