您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用Hibernate Criteria API编写HQL子句

使用Hibernate Criteria API编写HQL子句

您将要对分离的子查询使用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,5
serviceId = 2: date = 4,5,6

查询返回:

serviceId: 1, date: 5
serviceId: 2, date: 5,6

查询返回:

serviceId: 1, date: 5 
serviceId: 2, date: 6

让我知道这是否适合您。

其他 2022/1/1 18:13:33 有772人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶