簡體   English   中英

Java 迭代集合在保存后拋出 ConcurrentModificationException

[英]Java iterating collection throws ConcurrentModificationException after Save

嗨,我正在使用 hibernate 將對象保存到數據庫。 我有一個父 object 和它下面的一組子對象。 在迭代子對象時,如果匹配特定條件,則我使用 ApplicationEventPublisher 發布事件,此事件將單獨處理,這會添加一些額外的邏輯並保存 object。 控件從事件處理程序返回后,拋出"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.ConcurrentModificationException 。 知道如何糾正這個問題嗎? 任何幫助表示贊賞。

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)

您可以像這樣遍歷列表的副本:

var children = new ArrayList<>(parent.getChild());
children .forEach(child -> {
  if (child.getStatus().equals("PENDING")) {
    applicationEventPublisher.publishEvent(new NewEvent(child));
    publishLifeCycleEvent(deal);
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM