У меня есть следующие отношения:
@OneToMany(fetch = FetchType.EAGER, mappedBy="note", cascade = CascadeType.REMOVE, orphanRemoval = true)
private Set<Review> reviews = new HashSet<>();
в Примечание. java и
@OneToMany(fetch = FetchType.EAGER, mappedBy = "expert", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Review> notes = new HashSet<>();
в Эксперт. java.
Как видите, они относятся к классу Review, который представляет отношение M к N между Note и Expert. Поскольку мне нужно было добавить дополнительные атрибуты в это отношение, я создал класс ReviewId и класс Review следующим образом:
@Embeddable
public class ReviewId implements Serializable {
@Column(name = "fk_note")
protected Long noteId;
@Column(name = "fk_expert")
protected Long expertId;
[...]
}
@Entity
public class Review {
@EmbeddedId
private ReviewId id;
private int value;
private String comment;
@ManyToOne
@JoinColumn(name = "fk_note", insertable = false, updatable = false)
private Note note;
@ManyToOne
@JoinColumn(name = "fk_expert", insertable = false, updatable = false)
private Expert expert;
[...]
}
Когда я пытаюсь удалить заметку или эксперта, которые появляются в этом отношении, я получить следующую ошибку:
Cannot delete or update a parent row: a foreign key constraint fails (`db_example`.`review`, CONSTRAINT `FKls65s9wl28v98ts2kifir37p7` FOREIGN KEY (`fk_note`) REFERENCES `note` (`id`))
Как я могу заставить Hibernate удалять все отзывы, связанные с определенной заметкой / экспертом, когда я их удаляю? Спасибо!