如何在休眠子查询中同时使用行号和顺序?
Posted
技术标签:
【中文标题】如何在休眠子查询中同时使用行号和顺序?【英文标题】:how to use both row num and order by in hibernate sub query? 【发布时间】:2019-06-14 15:01:42 【问题描述】:select e from (select e from table_name e order by e.refid desc) as table_name e where (rownum) between :satrt and :end
我得到的错误是 " org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:(靠近第 1 行,第 15 列 "
休眠查询:FROM table_name where rownum between :start and :end order by refid desc
工作正常。但是行号顺序会有所不同。
请建议如何编写休眠查询。
【问题讨论】:
【参考方案1】:这是根据您的要求获取结果的 mysql 查询,其中行号顺序不会改变。
select * from (SELECT round(@row_number:=@row_number+1) AS row_number,csh.*
FROM table_name csh, (SELECT @row_number:=0) AS t ORDER BY id)t where
row_number between 1 and 10;
同样可以在hibernate中以简单的方式实现,而无需使用Query定义的方法编写这样的子查询。此休眠代码将产生与上述 sql 查询相同的结果集。
Root<table_name_entity> root = criteriaQuery.from(table_name_entity.class);
criteriaQuery.orderBy(builder.asc(root.get("ID")));
Query<table_name_entity> query = getSession().createQuery(criteriaQuery);
query.setFirstResult(0);
query.setMaxResults(9);
List<table_name_entity> list = query.list();
【讨论】:
以上是关于如何在休眠子查询中同时使用行号和顺序?的主要内容,如果未能解决你的问题,请参考以下文章