Я пытаюсь перенести MySQL Query, который работает на Hibernate HQL, это все для меня очень ново, поэтому я открыт для любых подсказок (Wrong Way, Wrong Structure, change all ...;))
Две таблицы A и B. (Структура разбита, только соответствующие части)
A содержит записи, каждая с уникальным идентификатором.B ссылается на эти идентификаторы и содержит булево-подобный маркер (TINYINT (1)).
Я хочу знать, сколько строк в B есть для каждой строки в A с идентификатором из строки и маркера A ==True (1).
Мой запрос MySQL был таким:
SELECT A.id, COUNT( IF( B.marker = 1, 1, NULL ) ) AS markerTrue, COUNT( IF( B.marker =0, 1, NULL ) ) AS markerFalse FROM A LEFT JOIN B ON B.a_id = A.id GROUP BY A.id
Это работает, и я перенес его на этот (HQL):
SELECT A.id, COUNT(CASE WHEN B.marker = 1 THEN 1 ELSE NULL END) as markerTrue, COUNT(CASE WHEN B.marker = 0 THEN 1 ELSE NULL END) as markerFalse FROM A LEFT JOIN B WITH B.a_id = A.id GROUP BY A.id
Это бросаетисключение:
org.hibernate.hql.ast.QuerySyntaxException: неожиданный токен: CASE рядом ...
В журналах также есть
org.hibernate.hql.ast.ErrorCounter - строка 1:19: неожиданный токен: CASE antlr.NoViableAltException: неожиданный токен: CASE
Но это все та же внутренняя ошибка.
Есть ли способ сделать это в HQL?Есть ли другой лучший способ, например, реструктуризация таблиц, каково мнение экспертов по этому поводу?