Собственный запрос JPQL с использованием SUM и COUNT - PullRequest
2 голосов
/ 22 января 2012

Я пытаюсь запустить следующий код:

public BigDecimal valuate(String searchTerms, String categoryPath) {
    Query query = em.createNativeQuery("SELECT SUM(maxBidAmount) / COUNT(maxBidAmount) FROM Item WHERE MATCH(title) AGAINST(':searchTerms') AND categoryPath=':categoryPath'", Double.class);
    query.setParameter("searchTerms", searchTerms);
    query.setParameter("categoryPath", categoryPath);
    double value = (double) query.getSingleResult();
    return new BigDecimal(value);
}

При этом я получаю следующее исключение:

Exception Description: Missing descriptor for [class java.lang.Double].

Когда я удаляю Double.class, я получаюдругое исключение.

Итак, мне просто интересно, как правильно использовать COUNT и SUM с JPQL.

Ответы [ 2 ]

6 голосов
/ 23 января 2012

Если SQL допустим, вам не нужно указывать Double.class в запросе def - просто используйте em.createNativeQuery (SQLString);Тип возврата используется, когда вы хотите, чтобы поставщик JPA строил сущность из результатов, но в этом случае вам нужны необработанные данные.

0 голосов
/ 22 января 2012

Собственный запрос - SQL , а не JPQL , и вы используете эти ключевые слова точно так же, как и любой SQL для вашей СУБД.Похоже, ваш провайдер JPA не принимает Double в качестве результирующего класса (некоторые допускают, чтобы класс результата был только сущностью).

DataNucleus JPA определенно допускает классы результата, отличные от сущности.

...