Warum tritt ConcurrentModificationException ohne explizite gleichzeitige Änderungen auf?Java

Java-Forum
Anonymous
 Warum tritt ConcurrentModificationException ohne explizite gleichzeitige Änderungen auf?

Post by Anonymous »

Ich stoße auf eine ConcurrentModificationException, wenn ich eine Question-Entität mit Spring Data JPA abrufe.
Unten ist eine vereinfachte Version der Entität:
@Data
public class Question {
//@ToString.Exclude
@ManyToOne
private User user;

//@ToString.Exclude
@OneToMany(cascade = CascadeType.ALL,
orphanRemoval = true)
private List comments;
}

public class User {
@JsonIgnore
@OneToMany
private List questions;
}

public class Comment {
@ManyToOne
@JoinColumn
private Question question;
}

Die Ausnahme tritt während dieses Repository-Aufrufs auf:
Question question = questionRepository.findById(id)
.orElseThrow(ResourceNotFoundException::new);
  • Ich verstehe, dass ConcurrentModificationException in Java auftritt, wenn eine Sammlung während der Iteration strukturell geändert wird, gemäß der Oracle Java API-Dokumentation.
Was habe ich versucht:
  • Die Die Ausnahme verschwindet, wenn ich sowohl Benutzer- als auch Kommentarfelder aus der toString()-Methode ausschließe oder @ToString entferne vollständig.
  • Es scheint damit zusammenzuhängen, wie toString() mit Beziehungen oder Lazy-Loading während des Debuggens oder Protokollierens interagiert.
  • Ich habe meinen Code auf explizite gleichzeitige Änderungen überprüft, aber keine gefunden.
Meine Frage ist:
Warum tritt diese Ausnahme überhaupt auf? ohne explizite gleichzeitige Änderungen, und wie kann ich es lösen oder ist dieses Problem auf das Entity-Design zurückzuführen?
Soll ich dieses Problem ignorieren, wenn es nur im Debugger oder Logger auftritt?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post