1

order by を使用して大規模なデータ セットに対するクエリを実行しています。最初と最後の行だけに興味があります。( を使用して) 最初の結果を取得するのは非常に簡単でCriteria.setMaxResult()、順序を逆にすることで最後の結果を取得できます。

ただし、両方を取得するには 2 つのクエリが必要なようで、データベースではあまり効率的ではない可能性があります。これは SQL で非常に簡単に達成できるので、一度に両方を取得できる高度な基準クエリを作成する方法を考えています。

データセットが非常に大きく、データベースからすべてを読み取るのに数分かかるため、それらすべてを取得してリストの最初と最後の要素を取得することはお勧めしません。

このクエリがデータベースに依存しないことを願っていますが、それが簡単でない場合は、ターゲット データベースが Oracle であると想定してください。

4

1 に答える 1

2

あなたは使用してみることができますScrollableResults

Criteria criteria = ...;
ScrollableResults scroll = criteria.scroll();
Object[] firstRow = scroll.get();  // or use other methods for getting the data
scroll.last();
Object[] lastRow = scroll.get();

これには、2つのクエリを実行するよりもさらに時間がかかる場合があることに注意してください。ただし、使用しているデータベースによって異なります。

于 2012-11-27T21:07:59.590 に答える