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 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号