Исключение, когда не найти - PullRequest
2 голосов
/ 13 октября 2008

В чем причина создания исключения в JPA, когда что-то не может быть найдено?
Добавлено: Такое поведение было замечено в EJB2 и до сих пор было удалено из EJB3 - но ... Оно сохраняется при вызове Query # getSingleResult () , который вызывает исключение NoResultException.

Обычно я не ожидал бы, что это будет исключением, что что-то не может быть найдено. На самом деле, в некоторых случаях это может быть ситуация по умолчанию, а в большинстве других случаев - ожидаемые. Это заставляет меня вспомнить старую поговорку о том, что вы не должны использовать исключения как часть вашей бизнес-логики, а только как то, что это такое, особые случаи, о которых вы не знаете или не хотите иметь дело.

У кого-нибудь есть идея, почему он реализован таким образом в JPA? Что является недостатком при возврате нулевого значения, когда что-то не может быть найдено?

1 Ответ

1 голос
/ 13 октября 2008

Вы вызываете getReference (class, primaryKey)? Это вызовет исключение, если первичный ключ не существует; если вы хотите вернуть нулевой объект, используйте вместо него find (class, primaryKey). getReference () разрешает отложенную загрузку, а find () - нет, но побочным эффектом этого является то, что для отложенной загрузки необходимо ссылаться на реальный объект, что означает, что вы должны передать действительный PK. 1001 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...