Может ли javax.persistence.Query.getResultList () вернуть ноль?

И если да, то при каких обстоятельствах?

В спецификации Javadoc и JPA ничего не сказано.

 rafa.ferreira02 июн. 2010 г., 16:54
Я искал именно этот вопрос! ТКС! до 4 ты!

Ответы на вопрос(6)

Query.getResultList() возвращает пустой список вместоnull, Так проверьisEmpty() в возвращенном результате и продолжайте с остальной логикой, если она ложна.

если вы тестируете набор результатов с помощью Jakarta's CollectionUtils.isNotEmpty, вы покрываете оба варианта.

Решение Вопроса

Java Persistence with Hibernate book, 2nd editionговорит:

If the query result is empty, a null is returned

Реализация спящего режима JPA (Entity Manager) возвращает null при вызове query.getResultList () без результата.

UPDATE

Как указывают некоторые пользователи, похоже, что новейшая версия Hibernate возвращает пустой список.

 22 мая 2017 г., 20:49
Просто проверьте оба условия, используя ИЛИ.if(rows == null || rows.size == 0){} где row это то, что возвращает getResultList ()
 17 июн. 2013 г., 17:11
Это, безусловно, устарело, Hibernate возвращает пустой список.
 17 февр. 2014 г., 19:31
С какой версии?
 22 сент. 2017 г., 16:01
Просто оберните его в Optional.ofNullable (), и вы установите его.
 25 июн. 2015 г., 15:52
Я все еще получаю ноль от Hibernate 4.3.10 (работает как движок JPA для Spring Data). Это происходит только для одного собственного запроса, так как типичные запросы JPA работают как положено.

org.hibernate.loader.Loader (4.1) вы увидите, что список всегда инициализируется внутри метода processResultSet () (доктор, источник).

protected List processResultSet(...) throws SQLException {
   final List results = new ArrayList();

   handleEmptyCollections( queryParameters.getCollectionKeys(), rs, session );
   ...
   return results;

}

Так что я не думаю, что сейчас он вернется к нулю.

 07 февр. 2017 г., 12:24
Приветствия для точного фрагмента кода. Но этот ответ сфокусирован на спящем режиме, который является одной из реализаций спецификации. Другие реализации, такие как OpenJPA, отличаются своим поведением. Кроме того, похоже, что hibernate изменил поведение в разных версиях.

когда я фактически выполнил запрос, который не соответствовал ни одной сущности, я получил пустой список, а не ноль. Это использует Hibernate и это то, что я считаю правильным поведением: пустой список - это правильный ответ, когда вы запрашиваете набор сущностей, а таких нет.

 25 янв. 2011 г., 05:18
для OpenJPA я также получаю пустой список вместо нуля.

что это не может произойти, поверите ли вы им? Учитывая, что ваш код может работать против разных реализаций JPA, вы бы поверили каждому разработчику, чтобы все было правильно?

Не смотря ни на что, я бы защищал код и проверял на ноль.

Теперь большой вопрос: должны ли мы рассматривать «ноль»? а пустой список как синоним? Это где спецификации должны помочь нам, а не.

Я предполагаю, что нулевое возвращение (если оно действительно могло бы произойти) было бы эквивалентно «Я не понял запрос» и пустой список будет "да, понял запрос, но записей не было".

Возможно, у вас есть путь к коду (вероятно, исключение), который имеет дело с непарсируемыми запросами, я бы предпочел направить нулевой возврат по этому пути.

 12 июл. 2009 г., 10:03
+1 вы так правы, когда говорите: «Вы бы доверяли каждому провайдеру JPA?» НЕТ :)
 13 июл. 2009 г., 20:48
Согласовано. Существует только «удовольствие от переносимости» из-за того, что спецификация JPA не делает то, что должна делать ... указать точную семантику Позор, это управляется комитетом с корыстными интересами.
 12 июл. 2009 г., 10:06
Отредактировано, чтобы добавить: Артур указал, что JPA Hibernate фактически возвращает ноль, если никакие записи не найдены. Так что на самом деле в этом случае нам нужно сложить нулевой и пустой список. Я считаю, что мыслительный процесс, который мы прошли выше, все еще действителен. Можно даже предположить, что для разных стеков JPA мы должны по-разному относиться к нулю. Добро пожаловать в переносимость веселья.

Ваш ответ на вопрос