0

私は組織を使用しています。冬眠します。ストリーミング モード内の 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

ありがとう、レイ。

4

1 に答える 1

0

問題は、2 つのクエリを使用したことです。ご存知のように、アクティブなストリーミングで並列クエリを開くべきではありません。解決策: 2 番目のクエリを避けます。

レイ。

于 2013-10-11T07:53:41.020 に答える