【问题标题】:Simple HQL Query and Criteria in HibernateHibernate 中的简单 HQL 查询和条件
【发布时间】:2013-07-12 10:31:22
【问题描述】:

我必须编写那个 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));

你能帮帮我吗?提前致谢!!

【问题讨论】:

  • 您显示的 Criteria 代码有什么问题?它不工作?它给出了错误的结果?
  • 我只收到一个结果。唯一具有最大 id 的 - 具有最大 id 的发送。而且它必须返回超过 350 个 - 每个地方最后一次发送。

标签: java sql hibernate criteria


【解决方案1】:

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

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

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

现在一切正常。

【讨论】:

    猜你喜欢
    • 2011-12-03
    • 2013-03-14
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多