hibernate用Query.setFirstResult和Query.setMaxResults分页时,传入的manresults不能为0,否则解析后的sql会去查全表数据

在用hibernate框架进行分页查询时,发现当query.setMaxResults(0)时,即设置为0时,会查全表的数据

打开hibernate输出sql的功能,发现当设置不为0时,解析出来的sql语句的格式如下(tempResuts就代表着主体查询sql)

    select
        * 
    from
        ( select
            row_.*,
            rownum rownum_ 
        from
            ( tempResults) row_ 
        where
            rownum <= ?
        ) 
    where
        rownum_ > ?

而当设置为0时,解析出来的sql语句格式如下(tempResuts就代表着主体查询sql)

tempResults

是的,没错,当设置为0时,hibernate解析出来的sql没有进行分页处理,而是直接主体查询sql进行了查询,就会导致查全表的数据了

因此,需要对前端传过来的参数进行校验,不能让其传0

原文地址:https://www.cnblogs.com/skyvalley/p/15543123.html