Я пытаюсь удалить запись из нескольких отношений OneToMany, однако независимо от того, что я делаю, она не обновляет коллекцию.Spring JPA OneToMany коллекция не удаляет запись
У меня есть три класса, рейтинг, содержание и пользователь. Я могу успешно создавать рейтинги, которые правильно заполняют контент и пользовательские коллекции. Однако я не могу удалить рейтинги из коллекций. Рейтинг удаляется, но содержимое и пользовательские коллекции не обновляются. Ниже приведены три класса:
public class Rating {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@ManyToOne(fetch = FetchType.EAGER)
@JsonIdentityInfo(generator = JSOGGenerator.class)
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JsonIdentityInfo(generator = JSOGGenerator.class)
private Content content;
public void setUser(User user) {
this.user = user;
if (!user.getRatings().contains(this)) {
user.getRatings().add(this);
}
}
public void setContent(Content content) {
this.content = content;
if (!content.getRatings().contains(this)) {
content.getRatings().add(this);
}
}
}
public class User {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIdentityInfo(generator = JSOGGenerator.class)
private Set<Rating> ratings;
public void addRating(Rating rating) {
this.ratings.add(rating);
if (rating.getUser() != this) {
rating.setUser(this);
}
}
public void removeRating(Rating rating) {
ratings.remove(rating);
}
}
public class Content {
@OneToMany(mappedBy = "content", cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIdentityInfo(generator = JSOGGenerator.class)
private Set<Rating> ratings;
public void addRating(Rating rating) {
this.ratings.add(rating);
if (rating.getContent() != this) {
rating.setContent(this);
}
}
public void removeRating(Rating rating) {
ratings.remove(rating);
}
}
public class RatingController {
@RequestMapping(value = "/api/ratings/{id}", method = RequestMethod.DELETE)
public void deleteRating(@PathVariable("id") int ratingId) {
Rating rating = ratingService.getRatingById(ratingId);
if (rating == null) {
return;
}
// THIS DOES NOT DO ANYTHING
rating.getUser().removeRating(rating);
// THIS DOES NOT DO ANYTHING
rating.getContent().removeRating(rating);
ratingService.deleteRating(rating);
}
}
Даже при удалении вручную из коллекций он по-прежнему не обновляется. Есть идеи?
Я реализовал как хэш-код() и equlas() для всех трех классов, и коллекции все еще не обновляются. (Я использовал генератор IntelliJ с гарантированными уникальными ненулевыми полями) – user3023421
На самом деле рейтинги контента обновляются, но по какой-то причине пользователь этого не делает. Странно, я более подробно рассмотрю, почему – user3023421
Спасибо, Xtreme Biker, который сработал. – user3023421