1

大きな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 つのことだけを発見しました。

  1. 私のような答えのない質問はほとんどありませんが、
  2. 私のケースとまったく同じである可能性があるケースを説明するバグですが、それはずっと前に修正されているはずです。
  3. 「DISTINCT_ROOT_ENTITYscroll()が使用されている場合、あまりうまく相互作用しない」というSOの回答の1つに少しコメントがあります。

これはScrollableResults私には役に立ちませんが、大量のメモリを節約できるため、まだ必要です。usedでスクロール結果を達成する方法をDISTINCT知っていますか? または回避策はありますか?

休止状態のバージョン: 4.2.4; JDK7; データベース: MSSQL

4

1 に答える 1