2015-07-31 4 views
1

У меня есть запрос, который возвращает JPQL результат без агрегатовгруппы по статье в JPQL запросе

public List<Transaction> getProjTransactionsByParametersId(Long id){ 
     StringBuilder sb = new StringBuilder("FROM Transaction AS t WHERE t.account.id = :id and status = 0"); 

     Query q = em.createQuery(sb.toString(), Transaction.class) 
       .setParameter("id", id); 

     List<Transaction> projTransactions = q.getResultList(); 

     return projTransactions; 
    } 

Как я могу включить группу, здесь? Я хочу somethinf как:

public List<Transaction> getProjTransactionsByParametersId(Long id){ 
     StringBuilder sb = new StringBuilder("SELECT sum(t.amount), t.valueDate FROM Transaction AS t WHERE t.account.id = :id and status = 0 GROUP BY t.valueDate"); 

     Query q = em.createQuery(sb.toString(), Transaction.class) 
       .setParameter("id", id); 

     List<Transaction> projTransactions = q.getResultList(); 

     return projTransactions; 
    } 

В этом случае, я должен создать некоторые новые поля для этого sum агрегата в Transaction отображении? Я читал литературу из других источников, но я не мог понять логику.

Например, для valueDate в сопоставлении У меня есть getter, который возвращает его значение в мою таблицу. Как насчет этой совокупной колонки?

ответ

1

Просто укажите ему псевдоним, например sum(t.amount) as amountSum. Тогда читайте читать значения из списка массивов (или использовать другие аналогичные alternatives):

List<Object[]> projTransactions = q.getResultList(); 
for (Object[] objects : projTransactions) { 
    Number amountSum = (Number) objects[0]; // Use appropriate data type 
    Date valueDate = (Date) objects[1]; 
} 

Кроме того, удалить (неправильно) класс аргумент от метода создания запроса:

Query q = em.createQuery(sb.toString())

+0

Он кидает исключение здесь, Query q = em.createQuery (sb.toString()) – Sher

+0

Что такое stacktrace? PS Я отредактировал свой ответ, чтобы указать, что в этом случае вам не нужен аргумент класса. –

+0

именно то, что мне нужно. Я был из-за этой классной части. благодаря – Sher