Playframework 删除子对象会导致JDBC批处理更新异常

Playframework 删除子对象会导致JDBC批处理更新异常,playframework,Playframework,当我尝试删除“课程”对象时,会出现以下异常: 引用完整性约束冲突:“FKCE6C075833B16F41:PUBLIC.TEACHER\u课程外键(课程ID)引用PUBLIC.COURSE(ID)”SQL语句:从课程中删除,其中ID=? “课程”类如下所示: @Entity public class Course extends Model { @ManyToOne public Teacher teacher; ... } @Entity public class Teacher

当我尝试删除“课程”对象时,会出现以下异常:
引用完整性约束冲突:“FKCE6C075833B16F41:PUBLIC.TEACHER\u课程外键(课程ID)引用PUBLIC.COURSE(ID)”SQL语句:从课程中删除,其中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;
  ...
}
“教师”课程如下所示:

@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;
  ...
}
@实体
公共课教师扩展模式{
@OneToMany(mappedBy=“teacher”,cascade=CascadeType.ALL)
公开名单课程;
...
}
每当我尝试从控制器中删除“课程”(使用delete()方法)时,我都会遇到上述异常。我怎么修理它?我尝试了各种各样的映射方法。我需要在某个地方修复数据库的模式吗


谢谢你的帮助!这是我在这里的第一篇帖子,如果有什么我需要澄清的,请告诉我

在我看来,您似乎正在尝试删除一条
课程
记录,但仍有一条
教师
记录引用了您试图删除的课程(存储在
教师课程
联接表中)。这是正常的,因为您定义了一种双向关系:
课程
知道它的
教师
,而
教师
知道属于它的
课程
对象

一种选择是尽可能简单地消除双向关系(例如,通过删除
课程
列表来删除从
教师
课程
的关系)。另一种方法是首先从
课程
列表中删除要删除的
课程
实例,然后将其删除(注意:删除课程之前,您可能必须先保留/合并
课程
列表,以便不再有链接)


可能会提供一些额外的见解。

我认为您正在反向映射关系。你在映射,就像课程是关系的家长方,而不是老师。发件人:

要将双向一对多映射为一对多,并将一对多端作为拥有端,您必须删除mappedBy元素,并将many-To-one@JoinColumn设置为可插入且可更新为false。此解决方案未优化,将生成一些额外的UPDATE语句

老师:

@Entity
public class Teacher extends Model {
  @OneToMany(cascade=CascadeType.ALL)
  @JoinColumn(name="teacher_id")
  public List<Course> courses;
  ...
}
@实体
公共课教师扩展模式{
@OneToMany(级联=级联类型.ALL)
@JoinColumn(name=“教师id”)
公开名单课程;
...
}

我试图从列表中删除课程实例,但结果证明这很复杂,我意识到我不需要它,所以我删除了关系。但我需要仔细阅读那些JPA文档。再次感谢!