您将要对分离的子查询使用Criteria projections API:
Criteria crit = session.createCriteria(Notification.class, "main");DetachedCriteria notificationSubQuery = DetachedCriteria.forClass(Notification.class, "sub");notificationSubQuery.setProjection(Projections.max("date"));notificationSubQuery.add(Restrictions.eqProperty("sub.serviceId", "main.serviceId"));crit.add(Subqueries.propertyIn("date", notificationSubQuery));crit.addOrder(Order.desc("date"));这反映了您在HQL查询中使用的技术。
编辑 :
我更新了查询,以使您的主通知类和子查询之间的serviceId匹配,基本上与此HQL查询相同:
FROM Notification main WHERe date IN (SELECt MAX(sub.date) FROM Notification sub WHERe sub.serviceId = main.serviceId) ORDER BY date ASC
这样可以避免在两个不同的serviceId之间使用非最大日期匹配的情况,如下所示:
serviceId = 1: date = 3,4,5serviceId = 2: date = 4,5,6
旧查询返回:
serviceId: 1, date: 5serviceId: 2, date: 5,6
新查询返回:
serviceId: 1, date: 5 serviceId: 2, date: 6
让我知道这是否适合您。



