Я бы сказал, что это зависит от вашего приложения и того, как метод будет использоваться.
- Если вы ожидаете, что результат "не найден" будет происходить достаточно часто, чтобы он мог негативно повлиять на производительность *, тогдаверните значение null и проверьте его в вызывающей программе.
- Если результаты "not found" будут относительно редкими или приведут к тому, что ваше приложение отклонит запрос, то возникнет исключение.Исключения могут сделать ваш код более легким для чтения, поскольку вы можете гарантировать, что успешный возврат приведет к созданию объекта, поэтому вам не нужно проверять его на нуль.
Я согласен с мнением, что исключенияследует использовать для исключительных условий, что является расширенным набором условий ошибки.Я также принял предпочтение Spring / Hibernate для непроверенных исключений, что позволяет избежать обременительной логики try / catch.
* При использовании исключений и возврате null не слишком много накладных расходов.Я только что сделал быстрый тест, требуется 4 мс для вызова метода миллион раз, который возвращает ноль, и только 535 мсек для другого метода миллион раз, который выдает исключение.