我对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;
}
我希望能够应用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";
但是Hibernate仍然会返回整个集合。
我看过使用JPA CriteriaBuilder API,但它伤害了我的大脑。
对于这一点,我总共n00b,非常感谢任何帮助!
答案 0 :(得分:7)
我认为你需要
q.setMaxResults(1);
另见这里接受的答案。
How do you do a limit query in HQL?
关于“order by”子句,您可以将其包含在queryString
。
答案 1 :(得分:2)
JPQL相当于LIMIT start,最大值为:
setFirstResult
和setMaxResults
:
q.setFirstResult(start);
q.setMaxResults(limit);