繁体   English   中英

休眠条件分组依据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的经验,但是仅是简单的东西,在这种情况下,我需要一种方法来进行投影,分组依据和订购依据。 我尝试了几次,但无法正常工作。 我到处看,但是找不到像这个查询那么复杂的查询。

这是我到目前为止所拥有的

    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"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM