Hibernate Criteria Group by AND 排序依据
Hibernate Criteria Group by AND Order By
我需要将下一个查询放入条件
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
我有使用 Criteria 的经验,但只是为了简单的东西,在这种情况下,我需要一种方法来进行投影、Group By 和 Order By。我试了几次,但没能成功。我到处找了找,但找不到任何帮助来解决像这个问题这样复杂的查询。
这是我目前所拥有的
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);
你的限制部分是对的。
因此,要计算您的投影:
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"));
我需要将下一个查询放入条件
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
我有使用 Criteria 的经验,但只是为了简单的东西,在这种情况下,我需要一种方法来进行投影、Group By 和 Order By。我试了几次,但没能成功。我到处找了找,但找不到任何帮助来解决像这个问题这样复杂的查询。
这是我目前所拥有的
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);
你的限制部分是对的。
因此,要计算您的投影:
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"));