2016-11-24 5 views
0

私は自然に、結果セットが非常に大きいクエリのパフォーマンスを向上させるためにページ分割を理解しています。Hibernateのページ番号付け - 結果の次のバッチを取得する方法?

正しい量を正常に返すpaginatedListメソッドが実装されています。しかし、それはMySQLのLIMITまたはSQLServerのTOP節の多くのようです。

@SuppressWarnings("unchecked") 
public List<T> paginatedList(int pageSize) { 
    Criteria criteria = getSession().createCriteria(persistentClass); 
    criteria.setFirstResult(0); 
    criteria.setMaxResults(pageSize); 
    return (List<T>) criteria.list(); 
} 

そして、私はこのように呼び出す:

方法は、このように実装されている

@Override 
public List<AlertLog> findAll() { 
    return super.paginatedList(1000); 
} 

この実装は0を返し、実行時に、取得する方法を

1000に結果1001位から2000位までなど?

+1

最初の結果を1000に設定します。 –

+0

はい、アイデア(および質問は編集されました)が実行されている次のバッチを取得します。 – gtludwig

答えて

1

あなたはそれがなるように、1000年に1000 maxresultsにfirstResultを設定する必要が次の1000年の結果を得るために...

criteria.setFirstResult(1000); 
criteria.setMaxResults(noOfEntries); 

noOfEntriesは総数その低いことを確認してください。

+0

OK、私はそれを考えました。しかし、私はビューレイヤーから新しい 'criteria.setFirstResult(n)'を何とか渡す必要があります。 – gtludwig

+1

もちろん、もちろんです。バックエンドは、フロントエンドが必要とするページを魔法のように推測することはできません。したがって、それは要求のパラメータでなければなりません。そしてその方法の議論。 –

関連する問題