大きなDBテーブルの使用法を実装ScrollableResults
しました.結合を使用して別のテーブルに対して同じことをしたくなるまで、すべてが完全に機能しました.
私が問題を抱えているエンティティには1対多の関連付けがあるためDISTINCT
、重複しないようにする必要があります。を使用してクエリの結果を取得している場合、すべてがうまく機能しますlist()
。しかし、私が使用するscroll()
と、DISTINCT
完全に無視されるようです - 私は多くの重複を取得します。
Query query = gameSession.createQuery("SELECT DISTINCT c FROM City c JOIN FETCH c.inhabitans i");
これはうまく機能し、リストには重複がありません:
List<City> list = query.list();
これは機能しません (DISTINCT が使用されていないように多くの重複を与えます):
ScrollableResults sr = query.scroll(ScrollMode.FORWARD_ONLY);
Query の代わりに Criteria を使用しても、すべて同じです。この特定の問題について、私は 3 つのことだけを発見しました。
- 私のような答えのない質問はほとんどありませんが、
- 私のケースとまったく同じである可能性があるケースを説明するバグですが、それはずっと前に修正されているはずです。
- 「DISTINCT_ROOT_ENTITY
scroll()
が使用されている場合、あまりうまく相互作用しない」というSOの回答の1つに少しコメントがあります。
これはScrollableResults
私には役に立ちませんが、大量のメモリを節約できるため、まだ必要です。usedでスクロール結果を達成する方法をDISTINCT
知っていますか? または回避策はありますか?
休止状態のバージョン: 4.2.4; JDK7; データベース: MSSQL