私は組織を使用しています。冬眠します。ストリーミング モード内の ScrollableResults。
n+1 の問題が発生しないことを確認しました。そして、すべての結合を同じ SQL ステートメントに入れます。
while ループで何らかの理由で例外が発生し、その前に追加の選択が表示されます (ストリーミング モードでの作業中に期待される最初の選択のほかに)。
私は何が欠けているのですか?
私のスクローラー:
protected void scroll(ScrollableHandler<T> handler,String namedQuery, Object... values){
T previousEntity=null;
Session s = null;
ScrollableResults results = null;
try {
s = (Session) em.getDelegate();
org.hibernate.Query query = s.getNamedQuery(namedQuery);
for (int i = 0; i < values.length; i++)
query.setParameter(i, values[i]);
results = query.setFetchSize(fetchSize).scroll(ScrollMode.FORWARD_ONLY);
while(results.next()) -> here I get the exception
{
T entity = (T) results.get(0);
if (null != entity &&
(! entity.equals(previousEntity))) {
handler.handle(entity);
previousEntity = entity;
}
s.clear();
}
} finally {
if (results != null)
results.close();
}
}
ログ:
11:54:24,182 WARN SqlExceptionHelper:143 - SQL Error: 0, SQLState: null
11:54:24,182 ERROR SqlExceptionHelper:144 - Streaming result set com.mysql.jdbc.RowDataDynamic@729d8721 is still active. No statements may be issued when any streaming result sets are open and in use on a given connection. Ensure that you have called .close() on any active streaming result sets before attempting more queries.
11:54:24,183 WARN CollectionLoadContext:347 - HHH000160: On CollectionLoadContext#cleanup, localLoadingCollectionKeys contained [3] entries
Exception in thread "Thread-11" java.lang.RuntimeException: Could not export
ありがとう、レイ。