2

当找不到某些东西时,在 JPA 中抛出异常的理由是什么?
补充: 此行为在 EJB2 中可见,并且已从 EJB3 中删除 - 但是...在调用抛出 NoResultException 的Query#getSingleResult()时仍然存在。

通常我不认为找不到某些东西是一个例外。实际上,在某些情况下,这可能是我的默认情况,并且在大多数其他情况下至少是预期的情况。这让我想起了一句老话,您不应该将异常用作业务逻辑的一部分,而只能将异常用作您不知道或不想处理的特殊情况。

有谁知道为什么它在 JPA 中以这种方式实现?找不到东西时返回 null 有什么缺点?

4

1 回答 1

1

你在调用 getReference(class, primaryKey) 吗?如果主键不存在,则会抛出异常;如果您希望返回 null 对象,请改用 find(class, primaryKey)。getReference() 允许延迟加载,而 find() 则不允许,但这样做的副作用是,要允许延迟加载,您需要引用一个真实的对象,这意味着您必须传递一个有效的 PK。

于 2008-10-13T10:03:03.820 回答