Hibernate中的简单HQL查询和标准

时间:2013-07-12 10:31:22

标签: java sql hibernate criteria

我必须编写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));
你可以帮帮我吗?在此先感谢!!

1 个答案:

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

现在一切都很顺利。