Как запустить агрегатную функцию, такую ​​как SUM, для двух столбцов в JPA и отобразить их результаты?

Я новичок в JPA. Так что мой вопрос должен быть настолько простым для некоторых.

Ниже приведен простой запрос в SQL, который я хотел бы преобразовать в JPA. У меня уже есть класс сущности называется TimeEnt .

SELECT 
     SUM(TimeEntryActualHours) as UnBilledHrs,
     SUM (TimeEntryAmount) as UnbilledAmount
FROM TimeEnt WHERE MatterID = 200
27
задан idmean 5 August 2015 в 11:25
поделиться

2 ответа

Язык запросов JPA поддерживает агрегатные функции в предложении SELECT, такие как AVG, COUNT, MAX, MIN, SUM, и поддерживает несколько select_expressions в предложении SELECT, в котором в случае, если результатом будет массив List из Object ( Object [] ). Из спецификации JPA:

4.8.1 Тип результата предложения SELECT

...

Тип результата оператора SELECT предложение определяется результатом типы select_expressions содержится в нем. Если несколько select_expressions используются в Предложение SELECT, результат запроса имеет тип Object [] , а элементы в этом результате соответствуют в порядок в порядке их спецификация в предложении SELECT и по типу к типам результатов каждое из select_expressions .

Другими словами, тот тип запроса, который вы упомянули в комментарии (и поскольку вы не предоставили свою сущность, я буду основывать свой ответ на вашем примере), не проблема. Вот пример кода:

String qlString = "SELECT AVG(x.price), SUM(x.stocks) FROM Magazine x WHERE ...";
Query q = em.createQuery(qlString);
Object[] results = (Object[]) q.getSingleResult();

for (Object object : results) {
    System.out.println(object);
}

Ссылки

  • Спецификация JPA 1.0
    • 4.8.1 Тип результата предложения SELECT
    • 4.8.4 Агрегатные функции в предложении SELECT
41
ответ дан 28 November 2019 в 05:02
поделиться

Обратите внимание на спецификацию EJB Query Language .

Идиома очень похожа на стандартный SQL

EntityManager em = ...
Query q = em.createQuery ("SELECT AVG(x.price) FROM Magazine x");
Number result = (Number) q.getSingleResult ();

С уважением,

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

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