Основной случай - когда кто-то звонит Thread.interrupt () на Вашем потоке.
может быть более безопасно бросить RuntimeException, если это происходит, когда Вы действительно не ожидаете его, но для очень простых случаев можно, вероятно, проигнорировать его.
Вы правы. Спецификация JPA ничего об этом не говорит. Но Java Persistence with Hibernate book, 2nd edition , говорит:
Если результат запроса пуст, возвращается ноль
Реализация Hibernate JPA (Entity Manager) возвращает ноль при вызове query.getResultList () без результата.
UPDATE
Как отмечали некоторые пользователи, кажется, что новейшая версия Hibernate вместо этого возвращает пустой список.
Пустой список также возвращается в Eclipselink, когда нет результатов найдено.
Если в спецификации сказано этого не может случиться, вы бы поверили им? Учитывая, что ваш код предположительно может работать с различными реализациями JPA, доверяете ли вы каждому разработчику, который сделает это правильно?
Несмотря ни на что, я бы написал защитный код и проверил значение null.
Теперь большой вопрос: должны ли мы рассматривать "null" и пустой список как синонимы? Вот где спецификации должны нам помочь, а не помогают.
Я предполагаю, что возврат null (если это действительно могло произойти) будет эквивалентен «Я не понял запрос», а пустой список - « да, запрос понял, но записей не было ».
Contrary to Arthur's post, when I actually ran a query which no entities matched I got an empty list, not null. This is using Hibernate and is what I consider correct behaviour: an empty list is the correct answer when you ask for a collection of entities and there aren't any.
]Конечно, если вы протестируете набор результатов с помощью Jakarta's CollectionUtils.isNotEmpty, вы будете охвачены в любом случае.[
].