Ich versuche, einen Eintrag aus mehreren OneToMany-Beziehungen zu löschen, aber egal, was ich tue, aktualisiert es die Sammlung nicht.Spring JPA OneToMany Sammlung nicht Eintrag löschen
Ich habe drei Klassen, Bewertung, Inhalt und Benutzer. Ich kann erfolgreich Bewertungen erstellen, die den Inhalt und die Benutzersammlungen ordnungsgemäß ausfüllen. Ich kann jedoch Bewertungen aus den Sammlungen nicht löschen. Die Bewertung wird erfolgreich gelöscht, die Inhalte und Benutzersammlungen werden jedoch nicht aktualisiert. Im Folgenden sind die drei Klassen:
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);
}
}
Selbst wenn manuell aus den Sammlungen zu entfernen es noch nicht aktualisiert. Irgendwelche Ideen?
ich beide hashCode() implementiert und equlas() für alle drei Klassen und die Sammlungen werden immer noch nicht aktualisiert. (Ich verwendete IntelliJ-Generator mit garantierten eindeutigen Nicht-Null-Feldern) – user3023421
Tatsächlich werden die Bewertungen des Inhalts aktualisiert, aber aus irgendeinem Grund ist der Benutzer nicht. Seltsam, ich werde einen genaueren Blick darauf werfen, warum – user3023421
Danke Xtreme Biker, das hat funktioniert. – user3023421