我正在尝试运行Hibernate
查询,该查询返回除最后5行之外的所有行,因此我的sql查询如下:
session.createQuery("FROM Book
WHERE id NOT IN(SELECT id FROM Book ORDER BY ID DESC LIMIT 5)
ORDER BY title");
很遗憾,LIMIT
中不允许使用Hibernate
,因此我收到错误消息:
HTTP状态500 - org.hibernate.hql.internal.ast.QuerySyntaxException: 意外标记:LIMIT靠近第1行第78列[FROM models.Book WHERE id NOT IN(SELECT id FROM models.Book ORDER BY ID DESC LIMIT 5)ORDER 按标题]
我如何解决这个问题?
答案 0 :(得分:2)
答案 1 :(得分:1)
好像你在问hibernate pagination
首先得到计数:
String countQ = "Select count (f.id) from Foo f";
Query countQuery = session.createQuery(countQ);
Long countResults = (Long) countQuery.uniqueResult();
然后计算你的极限起点和终点:
Long start = countResult - limit;
然后使用分页未来:
Session session = sessionFactory.openSession();
Query query = sess.createQuery("From Foo");
query.setFirstResult(start );
query.setMaxResults(limit);
List<Foo> fooList = fooList = query.list();
您可能需要更新查询,但我相信您明白了
答案 2 :(得分:0)
我还问了类似的限制问题&#34; LIMIT&#34; hibernate中的关键字。
Hibernate: how to select last N rows in ascending order of id? (in single query)
我认为只剩下两种方式,虽然它不是最好的表现。
希望有所帮助