Hibernate Criteria每组的maxResults

时间:2015-03-12 08:01:23

标签: java hibernate

我有一个包含internalId,value和date行的表。有多个条目具有相同的internalId但日期不同。我只对每个internalId的最新值感兴趣。如何使用Criteria进行管理?这是我目前的基本代码:

Criteria criteria = session.createCriteria(myClass.class); 

ProjectionList projList = Projections.projectionList(); 
projList.add(Projections.property("internalId"));
projList.add(Projections.property("value")); 
projList.add(Projections.property("date")); 

criteria.setProjection(projList);
criteria.add(Restrictions.in("internalId", internalIds));
List list = criteria.list();

1 个答案:

答案 0 :(得分:0)

根据我的理解,你想要的是完成这样的事情:

SELECT 
    internalId, 
    value, 
    max(date) as date 
FROM 
    table 
WHERE 
    internalId IN (1, 2, 3, 4 ...) 
GROUP BY 
    internalId

这可以通过Projections max功能实现:

projList.add(Projections.max("date"));

和groupProperty函数

projList.add(Projections.groupProperty("internalId"))

供参考:http://docs.jboss.org/hibernate/orm/3.5/reference/en/html_single/#querycriteria