使用 getSingleResult() 方法时如果没有结果(也就是返回 null)时习惯思维是应该返回 null,然而并不是这样的。下面是 getSingleResult() 方法API的定义:
如果没有结果将抛出 NoResultException 异常。
下面是 OpenJPA 中实现 getSingleResult() 方法,如下:
当 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; }