据我了解,在阅读文档并查看示例后,您不需要子查询来做您想做的事情。
基本上你编写 1 个查询并设置一个投影来进行分组。
Criteria query = currentSession.createCriteria(OutDataDetail.class);
query.setProjection(Projections.groupProperty("subjectid").as("subjectid"));
query.add(Restrictions.eq("algorithmno", "a0025_d2"));
query.add(Restrictions.eq("stringno", "01"));
query.addOrder(Order.desc("testid"));
return query.list();
Criteria API 本身就相当有用。但是,当您开始将 Projection、Subqueries、Order 等类与您的 Criteria 结合使用时,它的真正威力就出现了。
如果您想将Criteria API 与子查询一起使用,您可以执行以下操作:
DetachedCriteria subquery = currentSession.createCriteria(OutDataDetail.class);
subquery.add(Restrictions.eq("algorithmno", "a0025_d2"));
subquery.add(Restrictions.eq("stringno", "01"));
subquery.addOrder(Order.desc("testid"));
Criteria query = currentSession.createCriteria(OutDataDetail.class);
query.setProjection(Projections.groupProperty("subjectid").as("subjectid"));
query.add(Subqueries.exists(subquery);
return query.list();
两种实现都应返回OutDataDetail 对象的列表(假设这是您正在使用的对象)。
免责声明:我没有尝试过任何这些。这可能对您不起作用。这个答案是根据我过去使用Criteria API 及其相关类的知识以及 Hibernate 4.1 手册编写的。您可以查看有关投影和分组here 的手册部分。