大量のデータのパフォーマンスの問題に取り組んでいます。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;
}