我正在使用Hibernate将对象保存到数据库中。我在它下面有一个父对象和一组子对象。在对子对象进行迭代时,如果匹配特定的条件,则使用ApplicationEventPublisher发布事件,该事件被单独处理,这几乎不会添加额外的逻辑并保存对象。在控件从事件处理程序返回后,它引发java.util.ConcurrentModificationException
。
代码如下:
parent.getChild().forEach(child -> {
if (child.getStatus().equals("PENDING")) {
applicationEventPublisher.publishEvent(new NewEvent(child));
publishLifeCycleEvent(deal);
}
}
});
有一个事件监听程序:
@EventListener
public void saveChildEvent(NewEvent childEvent) {
Child child = childEvent.getChild();
//...do processing
childRepository.save(child);
}
但是在这一点上它抛出了java.util.ConcurentModificationException异常。我如何才能纠正这一点呢?
Stack Trace -
java.util.ConcurrentModificationException: null
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1493)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1516)
at org.hibernate.collection.internal.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:893)
at java.base/java.lang.Iterable.forEach(Iterable.java:74)
1条答案
按热度按时间6jygbczu1#
您可以迭代列表的副本,如下所示: