在這裏張貼這是我沒有看到太大的興趣在這裏:http://www.java-forums.org/jpa/96175-openjpa-one-many-within-one-many-merge-problems.htmlOpenJPA的 - 一個嵌套的一對多關係合併問題
試圖找出如果這是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<ClassRoom> 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<Desk> 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集合中刪除並致電更新。我注意到課室是否沒有辦公桌,沒有問題。但是,如果課室具有課桌,它會引發一個約束錯誤,因爲它似乎首先嚐試刪除課室,然後是課桌。 (對於classroom_id列,有一個外鍵約束)
我該怎麼做?是否有一些設置讓我在刪除已刪除的Class Room實例之前首先刪除內部「Desk」實例?
任何幫助,將不勝感激。如果您需要更多信息,請讓我知道。 謝謝,
嘗試清除集合:classrom.desks。明確(); –
在將它從學校移除之前嘗試清除教室的書桌集合,但在我更新學校時,它仍然在移除教室之前嘗試移除教室。 – StormyWaters
這似乎是一個openjpa問題。詳情請參閱:http://swexplorations.blogspot.co.uk/2014/08/openjpa-issues-part-2.html。我確信我上次遇到它時使用了openjpa,並且能夠修復它,指定一些配置屬性或使用一些自定義openjpa註釋。現在不記得了。另外http://stackoverflow.com/questions/36274433/openjpa-wrong-order-for-delete-of-child-when-deleting-parent –