在JPA Query上设置ORDER BY和LIMIT子句

dan*_*ins 2 java mysql sql hibernate jpa

我对Hibernate和JPA非常非常新.我希望能够将ORDER BY和LIMIT子句应用于Hibernate(?)查询,但是我的结果是空的.注意:我继承了这段代码.

这是当前的代码:

public SomeCoolResponse getSomeCoolResponse(String myId) {
    String queryString = "select aThing from AWholeBunchOfThings aThing " +
    "join aThing.thisOtherThing oThing join oThing.StillAnotherThing saThing " + 
    "where saThing.subthing.id = :id";

    Query q = getEntityManager().createQuery(queryString);
    q.setParameter("id", myId);

    List<MyThings> list = q.getResultList();

    if(list.size() > 0) {
        return list.get(0);
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

而不是获取整个列表然后只返回第一个结果(这是我们唯一需要的结果),我希望能够应用一个LIMIT 0,1子句,以便查询更快.此外,查询需要按降序排序,aThing.created这是一个UNIX时间戳整数.

我试过改变queryString这样的:

String queryString = "select aThing from AWholeBunchOfThings aThing " +
    "join aThing.thisOtherThing oThing join oThing.StillAnotherThing saThing " + 
    "where saThing.subthing.id = :id ORDER BY aThing.created LIMIT 0,1";
Run Code Online (Sandbox Code Playgroud)

但是Hibernate仍然会返回整个集合.

我已经看过使用JPA CriteriaBuilder API,但它伤害了我的大脑.

在这方面,我总共n00b,非常感谢任何帮助!

pet*_*rov 7

我想你需要

q.setMaxResults(1);
Run Code Online (Sandbox Code Playgroud)

另见这里接受的答案.

你如何在HQL中进行限制查询?

关于"order by"条款,您可以将其包含在queryString.

  • 那么我应该能够使用`q.getSingleResult()`吗? (2认同)