2016-09-14 1 views
0

мне нужно поставить следующий запрос в критерийHibernate Критерии Группы по И Заказывайте

SELECT DISTINCT SUBSTRING(id, 1, LENGTH(id)-3) AS id_trunc, MAX(version) as version, MAX(code) as code 
FROM theTable 
WHERE (version like '%.%' AND NOT version LIKE '%.0' AND event_code LIKE 'CODE1') OR (version LIKE '%.0' AND code LIKE 'CODE2') 
GROUP BY id_trunc 
ORDER BY id_trunc, version, code 

У меня есть exprience, используя критерии, но только для простых вещей, в этом случае я бы нужен способ, чтобы сделать прогноз, Группа «В» и «Порядок». Я пробовал несколько раз, но я не мог заставить его работать. Я смотрел повсюду, но я не мог найти никакой помощи для такого сложного запроса, как этот.

Это то, что я не имею до сих пор

Criterion whereClause = Restrictions.and(Restrictions.like("version","%.%"), 
          Restrictions.and(Restrictions.not(Restrictions.like("version","%.0")),Restrictions.like("code","CODE1"))); 

    Criterion secondWhere = Restrictions.and(Restrictions.like("Version","%.0"), Restrictions.like("code","CODE2")); 
    LogicalExpression orWhere= Restrictions.or(whereClause,secondWhere); 
    criteria.add(orWhere); 

ответ

0

Вы имеете в части ограничения права.

Таким образом, чтобы рассчитать прогноз:

criteria.setProjection(Projections.projectionList(). 
    add(Projections.groupProperty("SUBSTRING(id, 1, LENGTH(id)-3)", "id_trunc")). 
    add(Projections.max("version")). 
    add(Projections.max("code"))) 

Теперь сопоставить результаты, которые вы будете нуждаться другой объект, который будет содержать только три поля, и трансформатор.

criteria.setResultTransformer(Transformers.aliasToBean(TruncatedIdWithMaxVersion.class)) 

И для ORDER BY:

criteria.addOrder(Order.asc("id_trunc")); 
Смежные вопросы