Hibernate下分页语句第一页和第二页sql语句不一致问题解决方法

<prop key="hibernate.dialect">
新增类
OracleDialect
</prop>

OracleDialect  extends org.hibernate.dialect.Oracle10gDialect 
重写 getLimitString方法
        sql = sql.trim();
        boolean isForUpdate = false;
        if (sql.toLowerCase().endsWith(" for update")) {
            sql = sql.substring(0, sql.length() - 11);
            isForUpdate = true;
        }

        StringBuffer pagingSelect = new StringBuffer(sql.length() + 100);
        if (hasOffset) {
            pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
        } else {
            //pagingSelect.append("select * from ( ");
            pagingSelect.append("select * from ( select row_.*, rownum rownum_ from ( ");
        }

        pagingSelect.append(sql);
        if (hasOffset) {
            pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > ?");
        } else {
           // pagingSelect.append(" ) where rownum <= ?");
            pagingSelect.append(" ) row_ where rownum <= ?) where rownum_ > 0");
        }

        if (isForUpdate) {
            pagingSelect.append(" for update");
        }

        return pagingSelect.toString();

  

posted @ 2023-02-03 08:53  风语9  阅读(18)  评论(0编辑  收藏  举报