javax.persistence.NoResultException
是否违反了Java中异常使用的基本原则?
不应使用例外来控制程序的正常流程。从数据库查询返回零结果似乎是非常标准(非常例)的情况。无论如何都将通过调用代码来处理。
答案 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规范(或任何其他规范)并不能解释这种选择背后的原因。