2

大量のデータのパフォーマンスの問題に取り組んでいます。weblogic が提供するワーク マネージャーを使用して、作業を複数のスレッドに分散しようとしています。しかし、テーブルから特定のレコードを取得しようとすると、次の例外が発生します。 .

Caused by: java.util.ConcurrentModificationException
    at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:365)
    at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:384)
    at java.util.LinkedHashMap$EntryIterator.next(LinkedHashMap.java:383)
    at org.hibernate.util.IdentityMap.entryArray(IdentityMap.java:228)
    at org.hibernate.util.IdentityMap.concurrentEntries(IdentityMap.java:89)
    at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:136)
    at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
    at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
    at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1261)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:890)

これはマルチスレッドのせいですか?私が使用している休止状態のバージョンは 3.6.1 です。例外は非常にランダムです。完全に機能する場合もあれば、Eclipse にデバッグ ポイントを配置するとうまくいく場合もあります。

*編集:例外を発生させたコードスニペット:

public Dto findRecentRequests()
{
    Dto dto = getHibernateTemplate().executeFind(new HibernateCallback()
    {
        public Object doInHibernate(Session session) throws HibernateException
        {
            Query q = session.createQuery(newQuery);
            q.setMaxResults(1);
            return (Dto) query.uniqueResult();

        }
    });
    return dto;
}
4

0 に答える 0