У меня есть объект JPA «Запрос», которому принадлежит список ответов (также объекты JPA). Вот как это определено в Request.java:
@OneToMany(cascade= CascadeType.ALL, mappedBy="request")
private List<Answer> answerList;
И в ответе.java:
@JoinColumn(name = "request", referencedColumnName="id")
@ManyToOne(optional = false)
private Request request;
В ходе выполнения программы в список ответов запроса могут быть добавлены или удалены ответы, или фактический объект списка может быть заменен. Моя проблема заключается в следующем: когда я объединяю запрос в базу данных, объекты ответа, которые использовались в списке, сохраняются в базе данных, то есть объекты ответа, которые запрос больше не содержит. ссылки на (косвенно, через Список) не удаляются.
Это не то поведение, которое мне нужно, так как если я объединяю запрос в базу данных, а затем снова извлекаю его, его список ответов может быть другим. Я делаю какую-то ошибку программирования? Есть ли аннотация или настройка, которая гарантирует, что ответы в базе данных точно соответствуют ответам в списке запросов?
Решение состоит в том, чтобы сохранить ссылки на исходный список ответов, а затем использовать EntityManager для удаления каждого старого ответа перед объединением запроса, но, похоже, должен быть более чистый способ.