Что такое JPA EntityManager.getSingleResult ( ) вернуть для запроса COUNT?

Что EntityManager.getSingleResult () возвращает для запроса COUNT?

Итак ... каков точный тип foo во время выполнения?

Object foo = em.createQuery("SELECT COUNT(t) FROM com.company.Thing t WHERE prop = :param")
       .setParameter("param", value).getSingleResult();
29
задан Pascal Thivent 26 August 2010 в 16:23
поделиться

4 ответа

COUNT(t) специально возвращает java.lang.Long. Когда он появляется сам по себе в этом контексте, он возвращается как есть.

(В других контекстах Long, сгенерированный COUNT, может быть обернут, но не сегодня.)

2
ответ дан 28 November 2019 в 01:01
поделиться

Функция AFAIK COUNT возвращает значение Long

1
ответ дан 28 November 2019 в 01:01
поделиться

Согласно спецификации JPA, COUNT возвращает Long:

4.8.4 Агрегированные функции в предложении SELECT Результатом запроса

может быть результат совокупности функция, примененная к выражению пути.

Следующие агрегатные функции могут использоваться в предложении SELECT запрос: AVG, COUNT, MAX, MIN, SUM.

Для всех агрегатных функций, кроме COUNT, выражение пути, которое аргумент агрегатной функции должен заканчиваться в поле состояния. То Аргумент выражения пути для COUNT может заканчиваться либо полем состояния, либо поле-ассоциация или аргумент для COUNT может быть идентификацией Переменная.

Аргументы функций SUM и AVG должен быть числовым. Аргументы к функции MAX и MIN должны соответствовать к упорядочиваемым типам полей состояния (т. е., числовые типы, строковые типы, символьные типы или типы даты).

Тип Java, содержащийся в результат запроса с использованием агрегата Функция выглядит следующим образом:

  • COUNT возвращает Long.
  • MAX, MIN возвращают тип поля состояния, к которому они применяются.
  • AVG возвращает значение Double.
  • SUM возвращает значение Long при применении к полям состояния целочисленных типов (другие чем BigInteger); Двойной при применении к полям состояний с плавающей запятой виды; BigInteger при применении к поля состояния типа BigInteger; и BigDecimal при применении к поля состояния типа BigDecimal.

Если используется SUM, AVG, MAX или MIN и нет значений, к которым можно применить агрегатную функцию, результат агрегатной функции НУЛЕВОЙ.

Если используется COUNT и нет значения, к которым можно применить COUNT, результат агрегатной функции равен 0.

Аргумент агрегатной функции может предшествовать ключевое слово DISTINCT, чтобы указать этот дубликат ценности должны быть устранены до применяется агрегатная функция.

Нулевые значения удаляются перед применяется агрегатная функция, независимо от того, является ли ключевое слово DISTINCT указан.

42
ответ дан 28 November 2019 в 01:01
поделиться

Очевидно, число, которое является подсчетом из запроса :) Его тип по спецификации — Long.

1
ответ дан 28 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: