我正在尝试删除父学生或父课程,但出现此错误:
引起:org.postgresql.util.PSQLException:错误:更新或删除表“学生”违反了表“注册”上的外键约束“fkeyvuofq5vwdylcf78jar3mxol”
RegistrationId 类是注册类中使用的复合键。我正在使用 Spring data jpa 和 spring boot。
我究竟做错了什么?我知道在删除父级时放置 cascadetype.all 也应该删除子级,但它却给了我一个错误。
@Embeddable
public class RegistrationId implements Serializable {
@JsonIgnoreProperties("notifications")
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "student_pcn", referencedColumnName="pcn")
private Student student;
@JsonIgnoreProperties({"teachers", "states", "reviews"})
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "course_code", referencedColumnName="code")
private Course course;
注册班
@Entity(name = "Registration")
@Table(name = "registration")
public class Registration {
@EmbeddedId
private RegistrationId id;
原文由 Merv 发布,翻译遵循 CC BY-SA 4.0 许可协议
我通过使用休眠 @OnDelete 注释使其工作。 JPA.persistence CascadeTypes 无法正常工作的一些原因。它们对我选择的任何一个都没有影响。
就像下面一样。现在我可以删除父学生或父课程,并删除所有子项(注册)。