Jpa 原生SQL分页查询“一个别名引发的一场血案”

问题描述:  备注:刚开始SQL 没有加任何AS 别名

第一页:正常显示

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第1张图片

 

第二页:显示不正常

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第2张图片

 

为什么第一页可以第二页不行,一模一样的SQL没有修改过?

百度查了一下,没什么资料、无法下手。。。

  1. 看了日志发现第一页域第二页的SQL显示不一样

select TOP(?)  from  第一页

 WITH query AS (SELECT inner_query.*, ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __hibernate_row_nr__ FROM   第二页

明显不一样的处理逻辑

  1. select med.*  from 都可以显示出来
  2. 没有办法只能看源码了,经过多次的断点终于发现猫腻了。

org.hibernate.dialect.pagination.SQLServer2005LimitHandler#processSql

 

  1. 第一页

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第3张图片

 

 

    Jpa 原生SQL分页查询“一个别名引发的一场血案”_第4张图片

 2.第二页逻辑

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第5张图片

org.hibernate.dialect.pagination.SQLServer2005LimitHandler#fillAliasInSelectClause

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第6张图片

org.hibernate.dialect.pagination.SQLServer2005LimitHandler#getAlias

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第7张图片

没错这里就是最后结局。。。。

加上  as  别名  就可以了。。。。如果是*号默认就是全部

 

Jpa 原生SQL分页查询“一个别名引发的一场血案”_第8张图片

你可能感兴趣的:(JAVA)