1

アプリケーションのページングに問題があります。setFirstResult および setMaxResults メソッドを使用したいのですが、間違った出力が得られました。

(私のデータベース: SQLite)

例:

    Session session = HibernateUtil.getSessionFactory().openSession();

    int page = 0;
    int maxRows = 20;

    while (page < 5) {

        Criteria criteria = session.createCriteria(Book.class);
        criteria.setFirstResult(page * maxRows).setMaxResults(maxRows);
        criteria.addOrder(Order.asc("id"));
        List<Book> list = criteria.list();

        System.out.println("FirstRow: " + page * maxRows + " - RowsLimit: " + maxRows);
        for (Book b : list) {
            System.out.println(b.getId());
        }
        page++;
    }
    session.close();

出力は私に与えました:

FirstRow: 0 - RowsLimit: 20
1
.
.
.
20
FirstRow: 20 - RowsLimit: 20
21
.
.
.
40
FirstRow: 40 - RowsLimit: 20
21
.
.
.
40
FirstRow: 60 - RowsLimit: 20
21
.
.
.
40

最初の 2 つの「ページ」だけが正しく機能し、その後は同じ範囲の行が表示される理由がわかりません。

アドバイスがあればthx

4

1 に答える 1

3

ここに解決策があります。

http://shagy0101.blogspot.cz/2012/03/sqlite-jpa-hibernate-pagination.html

問題は SQLite ダイアレクトにありました。SQLiteDialect にこのメソッドを追加するだけです:

 @Override
 public boolean bindLimitParametersInReverseOrder(){
     return true;
 }
于 2013-02-23T00:01:47.390 に答える