0

我必须编写那个 HQL 查询:

FROM Sending adp WHERE adp.id = (SELECT MAX (adpw.id) FROM Sending adpw WHERE adpw.place = adp.place) 

我必须使用 Criteria API,但我无法管理它。查询返回数据库中所有地方的最后一次发送,它工作得很好,但现在我必须将它转换为标准。我唯一能做的就是用以下代码只显示一个地方:

Criteria criteria = getSession().createCriteria(
                    Sending.class);
criteria.setFetchMode("place", FetchMode.JOIN);
DetachedCriteria maxId = DetachedCriteria.forClass(Sending.class).setProjection(Projections.max("id"));
criteria.add(Property.forName("id").eq(maxId));

你可以帮帮我吗?提前致谢!!

4

1 回答 1

0

很抱歉回答我自己的问题,但我找到了解决方案。

我忘记了子查询可以与它们自身相关联。我用以下代码实现了我的查询:

Criteria criteria = getSession().createCriteria(Sending.class);
DetachedCriteria dc = DetachedCriteria.forClass(Sending.class, "adpw");
dc.add(Restrictions.eqProperty("adpw.place", "adp.place"));
dc.setProjection(Projections.max("id"));
criteria.add(Property.forName("id").eq(dc));
criteria.setMaxResults(count).setFirstResult(start);
return criteria.list();

现在一切都很好。

于 2013-07-15T06:59:41.933 回答