OpenJPA: как построить группу по запросу с группой
Вопрос
В JPQL я хочу построить эквивалентный запрос к этому:
select *, count(*) as finger_count from page_delta_summary
where delta_history_id = ? and change_type = ? group by fingerprint;
куда fingerprint
Является ли Varchar Field в таблице page_delta_summary
. Отказ То, что у меня есть это:
select d, count(d) as finger_count from PageDeltaSummary d
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType
GROUP BY d.fingerprint"
куда PageDeltaSummary
Является ли моя сущность. Но я получаю следующее исключение:
org.apache.Openjpa.persistence.argumentexception: Ваш запрос на тип «Класс COM.su3analytics.sizedaelta.Model.pagedeltasummary» с фильтром «Выбрать D, count (d) из PageEltEltasummary d где d.deltahistoryid =: deltahistoryid и d.type =: Группа PagedEltAtype по D.FINGRINTPRINT "недействительна. Ваш выбор и имеющие предложения должны включать только агрегаты или значения, которые также отображаются в пункте вашей группировки.
Запрос работает нормально, если я удаляю либо количество (d) как Permer_Count или Group.
Какие-либо предложения?
Спасибо
Решение
Ваш оригинальный запрос SQL не имеет смысла, поэтому вы не можете преобразовать в JPQL.
Я думаю, вы хотите получить счет page_delta_summary
Строки удовлетворяют where
Условия для каждого fingerprint
. Отказ Если это так, SQL-запрос выглядит так:
select fingerprint, count(*) as finger_count from page_delta_summary
where delta_history_id = ? and change_type = ? group by fingerprint;
И JPQL - нравится это:
select d.fingerprint, count(d) from PageDeltaSummary d
where d.deltaHistoryId = :deltaHistoryId and d.type = :pageDeltaType
GROUP BY d.fingerprint
Эти запросы возвращает парыfingerprint
, finger_count
> вместо полной page_delta_summary
строки (или объекты).