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.
- 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.
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?