Переопределить Eclipselink JPA Paging для DB2 - PullRequest
0 голосов
/ 18 января 2019

У меня проблемы с подкачкой страниц по порядку, так как я не работаю в Eclipselink независимо от того, какую платформу я настраиваю в файле persistence.xml. Я вспоминаю основные части Eclipselink в прошлом, я помню расширение класса платформы, но детали улетучились из моей памяти. Сегодня я искал ответы и ничего не смог найти, поэтому надеюсь, что кто-то здесь уже делал это и может указать мне правильное направление.

Решение:

public class DB2MainframeSystemNamingPlatform extends DB2MainframePlatform {

@Override
public void printSQLSelectStatement(DatabaseCall call, 
        ExpressionSQLPrinter printer, SQLSelectStatement statement){
    int max = 0;
    int firstRow = 0;

    if (statement.getQuery()!=null){
        max = statement.getQuery().getMaxRows();
        firstRow = statement.getQuery().getFirstResult();
    }

    if ( !(this.shouldUseRownumFiltering()) || ( !(max>0) && !(firstRow>0) ) ){
        super.printSQLSelectStatement(call, printer, statement);
        return;
    } else if ( max > 0 ){
        call.setFields(statement.printSQL(printer));
        printer.printString(" LIMIT ");
        printer.printParameter(DatabaseCall.MAXROW_FIELD);
        printer.printString(" OFFSET ");
        printer.printParameter(DatabaseCall.FIRSTRESULT_FIELD);
    } else {
        call.setFields(statement.printSQL(printer));
        printer.printString(" OFFSET ");
        printer.printParameter(DatabaseCall.FIRSTRESULT_FIELD);
    }
    call.setIgnoreFirstRowSetting(true);
    call.setIgnoreMaxResultsSetting(true);
}   
}
...