如何在休眠子查询中同时使用行号和顺序?

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

【讨论】:

以上是关于如何在休眠子查询中同时使用行号和顺序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spring-data 中使用子图(使用休眠)?

如何使用在 where 子句中具有父属性的休眠查询更新数据

如何在休眠中使用 UNION 执行查询

休眠一对多关联删除

带有子查询的休眠标准

如何在休眠中使用 CreateSqlQuery 查询不同的数据库?