当我尝试删除“课程”对象时,我得到了这个例外:
Referential integrity constraint violation: "FKCE6C075833B16F41: PUBLIC.TEACHER_COURSE FOREIGN KEY(COURSES_ID) REFERENCES PUBLIC.COURSE(ID)" SQL statement: delete from Course where id=?
“课程”课程如下所示:
@Entity
public class Course extends Model {
@ManyToOne
public Teacher teacher;
...
}
“老师”课程如下所示:
@Entity
public class Teacher extends Model {
@OneToMany(mappedBy="teacher", cascade=CascadeType.ALL)
public List<Course> courses;
...
}
每当我尝试从我的控制器中删除“课程”时(使用delete()方法),我得到上面的例外。我如何解决它?我尝试了各种映射方式。我是否需要在某处修复数据库的架构?
感谢您的帮助!这是我在这里的第一篇文章,如果有什么我需要更清楚的,请告诉我!
答案 0 :(得分:1)
我认为您正在尝试删除Course
记录,但仍有Teacher
条记录,其中包含您要删除的课程的参考(存储在{ {1}}加入表格)。这是正常,因为您已定义了双向关系:TEACHER_COURSE
知道其Course
,而Teacher
知道Teacher
个对象属于它。
一种选择是尽可能简单地摆脱双向关系(例如,通过删除Course
列表删除Teacher
与Course
之间的关系)。另一种方法是首先从courses
列表中删除要删除的Course
实例,然后将其删除( note :您可能必须保留/合并{{ 1}}在删除课程之前首先列出所以没有链接了。)
This question on the matter可能会提供一些额外的见解。
答案 1 :(得分:1)
我认为您正在反向映射关系。你的映射就像是关系的父方,而不是老师。来自Hibernate docs:
要将双向一个映射到多个,将一对多方面作为拥有方,您必须删除mappedBy元素并将多个@JoinColumn设置为可插入且可更新为false。此解决方案未经过优化,将生成一些额外的UPDATE语句。
@Entity
public class Course extends Model {
@ManyToOne
@JoinColumn(name="teacher_id")
public Teacher teacher;
...
}
老师:
@Entity
public class Teacher extends Model {
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="teacher_id")
public List<Course> courses;
...
}