为什么JPA使用javax.persistence.NoResultException

时间:2014-06-04 18:52:09

标签: java java-ee jpa

javax.persistence.NoResultException是否违反了Java中异常使用的基本原则?

不应使用例外来控制程序的正常流程。从数据库查询返回零结果似乎是非常标准(非常例)的情况。无论如何都将通过调用代码来处理。

1 个答案:

答案 0 :(得分:19)

请注意javadoc for NoResultException州:

  

在查询上执行Query.getSingleResult()或TypedQuery.getSingleResult()并且没有返回结果时,由持久性提供程序抛出。

使用getSingleResult()表示您知道完全一个结果。不是更多(见NonUniqueResultException),而不是更少。因此,我认为缺少结果确实是一种特殊情况。

如果您不确定要返回的数据量,请使用getResultList()

但是,对于JPA API的这一部分,您并不孤单。 This post表示getSingleResult()唯一真正有效的用途是返回标量值,指出NoResultException未经检查的例外并引用Bloch' s Effective Java,第40项:

  

对可恢复条件使用已检查的异常,对编程错误使用运行时异常。

不幸的是,JPA 2.0规范(或任何其他规范)并不能解释这种选择背后的原因。