2013-07-12 58 views
0

标准我必须写HQL查询:简单的HQL查询,并在Hibernate中

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

我必须使用标准的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

您显示的标准代码有什么问题?它不起作用?它给出了错误的结果? – mthmulders

+0

我只收到一个结果。唯一的一个最大ID - 一个最大ID的发送。它必须返回超过350 - 从每个地方最后发送。 –

回答

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(); 

一切工作现在很好。