Когда я использую HQL для запроса к моей базе данных, этот запрос работает нормально и возвращает хорошие данные:
select
case
when activityjp0_.status<>'CLOSED'
and (activityjp0_.user_id is null) then 'UNASSIGNED'
else case
when activityjp0_.status<>'CLOSED'
and activityjp0_.deadline<CURRENT_DATE then 'OVERDUE'
else case
when activityjp0_.status='PENDING' then 'IN_PROGRESS'
else activityjp0_.status
end
end
end as col_0_0_,
count(distinct activityjp0_.id) as col_1_0_
from
activities activityjp0_
group by
case
when activityjp0_.status<>'CLOSED'
and (activityjp0_.user_id is null) then 'UNASSIGNED'
else case
when activityjp0_.status<>'CLOSED'
and activityjp0_.deadline<CURRENT_DATE then 'OVERDUE'
else case
when activityjp0_.status='PENDING' then 'IN_PROGRESS'
else activityjp0_.status
end
end
end
Когда я использую Criteria API для генерации того же запроса, он дает:
select
case
when activityjp0_.status<>?
and (activityjp0_.user_id is null) then 'UNASSIGNED'
else case
when activityjp0_.status<>?
and activityjp0_.deadline<? then 'OVERDUE'
else case
when activityjp0_.status=? then 'IN_PROGRESS'
else activityjp0_.status
end
end
end as col_0_0_,
count(distinct activityjp0_.id) as col_1_0_
from
activities activityjp0_
group by
case
when activityjp0_.status<>?
and (activityjp0_.user_id is null) then 'UNASSIGNED'
else case
when activityjp0_.status<>?
and activityjp0_.deadline<? then 'OVERDUE'
else case
when activityjp0_.status=? then 'IN_PROGRESS'
else activityjp0_.status
end
end
end
НО это приводит к ошибке JDB C, утверждающей:
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "ACTIVITYJP0_.USER_ID" must be in the GROUP BY list; SQL statement:
выберите случай, когда activityjp0_.status <>? и (activityjp0_.user_id имеет значение null), а затем «UNASSIGNED», в противном случае Activityjp0_.status <>? и активность jp0_.deadline? и (activityjp0_.user_id имеет значение null), а затем «UNASSIGNED», в противном случае Activityjp0_.status <>? и activityjp0_.deadline
Если я заменяю переменные в том же сгенерированном запросе и запускаю его для своей базы данных (в консоли h2), он запускается без ошибок
Как это возможно?