OpenJPA之使用getSingleResult报异常NoResultExceptionNo entity found for query

本文将介绍怎样去处理 Hibernate JPA 使用 getSingleResult() 报异常 NoResultExceptionNo entity found for query 错误。

使用 getSingleResult() 方法时如果没有结果(也就是返回 null)时习惯思维是应该返回 null,然而并不是这样的。下面是 getSingleResult() 方法API的定义:

OpenJPA之使用getSingleResult报异常NoResultExceptionNo entity found for query

如果没有结果将抛出 NoResultException 异常。

下面是 OpenJPA 中实现 getSingleResult() 方法,如下:

OpenJPA之使用getSingleResult报异常NoResultExceptionNo entity found for query

当 result 为 null 或 result 是空的时,抛出 NoResultException 异常。

这就让人非常恼火了,查不到结果任何时候的业务逻辑都不希望你抛一个异常出来,还要因为这个异常去做异常处理。那么解决的方法有两个:

(1)放弃使用 getSingleResult() 改用 uniqueResult()

return getSession().createQuery(hql).uniqueResult();

(2)保险的做法是:仍然使用 getResultList() 方法,无论你是获取一个还是多个结果,获取一个结果的时候做一下处理:

List list = getSession().createQuery(hql).getResultList();
if (list.size() > 0) {
    return list.get(0);
} else {
    return null;
}
所谓天才,只不过是把别人喝咖啡的功夫都用在工作上了。——鲁迅
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号