将其发布在这里是因为我在这里没有太大的兴趣:http : //www.java-
forums.org/jpa/96175-openjpa-one-many-within-one-many-merge-
problems.html
试图找出这是OpenJPA的问题还是我做错了…
尝试使用OpenJPA更新包含与另一个实体具有一对多关系的实体时,遇到一个问题。这是我正在谈论的简单示例:
@Entity
@Table(name = "school")
public class School {
@Column(name = "id")
protected Long id;
@Column(name = "name")
protected String name;
@OneToMany(mappedBy = "school", orphanRemoval = true, cascade = CascadeType.ALL)
protected Collection classRooms;
}
@Entity
@Table(name = "classroom")
public class ClassRoom {
@Column(name = "id")
protected Long id;
@Column(name = "room_number")
protected String roomNumber;
@ManyToOne
@JoinColumn(name = "school_id")
protected School school;
@OneToMany(mappedBy = "classRoom", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
protected Collection desks;
}
@Entity
@Table(name = "desk")
public class Desk {
@Column(name = "id")
protected Long id;
@ManyToOne
@JoinColumn(name = "classroom_id")
protected ClassRoom classRoom;
}
在SchoolService类中,我具有以下更新方法:
@Transactional
public void update(School school) {
em.merge(school);
}
我正在尝试从学校中删除一间教室。我将其从classRooms集合中删除并调用更新。我注意到教室没有书桌,没有问题。但是,如果教室有桌子,它会抛出一个约束错误,因为它似乎首先尝试删除教室,然后再删除桌子。(教室ID列有一个外键约束)
我会以错误的方式处理吗?我是否缺少某些设置才能让它先删除内部的“桌面”实例,然后再删除已删除的“课堂”实例?
任何帮助,将不胜感激。如果您需要更多信息,请告诉我。谢谢,