我必须编写HQL查询:
FROM Sending adp WHERE adp.id = (SELECT MAX (adpw.id) FROM Sending adpw WHERE adpw.place = adp.place)
我必须使用Criteria API,我无法管理它。查询返回数据库中所有位置的最后一次发送,它运行良好,但现在我必须将其转换为Criteria。我唯一能做的就是用以下代码展示一个地方:
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));
你可以帮帮我吗?在此先感谢!!
答案 0 :(得分: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();
现在一切都很顺利。