Почему ConcurrentModificationException возникает без явных одновременных изменений?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему ConcurrentModificationException возникает без явных одновременных изменений?

Сообщение Anonymous »

Я обнаружил исключение ConcurrentModificationException при получении объекта «Вопрос» с помощью Spring Data JPA.
Ниже приведена упрощенная версия объекта:

Код: Выделить всё

@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;
}
Исключение возникает во время вызова этого репозитория:

Код: Выделить всё

Question question = questionRepository.findById(id)
.orElseThrow(ResourceNotFoundException::new);
  • Я понимаю, что ConcurrentModificationException в Java возникает, когда коллекция структурно изменяется во время итерации, как указано в документации Oracle Java API. >
Что я пробовал:
  • исключение исчезает, если я исключаю поля пользователя и комментариев из метода toString() или удаляю @ToString полностью.
  • Похоже, это связано с тем, как toString() взаимодействует с отношениями или отложенной загрузкой во время отладки или журналирования.
  • Проверил мой код на наличие явных одновременных изменений, но не обнаружил ни одного.
Мой вопрос:
Почему это исключение возникает даже без явных одновременных изменений, и как я могу решить эту проблему, или эта проблема возникла из-за дизайна Entity?
Следует ли мне игнорировать эту проблему, если она возникает только в отладчике или средстве журнала?

Подробнее здесь: https://stackoverflow.com/questions/793 ... rent-modif
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»