我有一個子實體和兩個父實體,每個父實體都有一個子實體列表。如果我通過首先獲取Parent_1的子項然後將該列表分配給Parent_2,爲Parent_2創建子實體列表,則hibernate根據以下代碼刪除「Parent_1-Child」連接表記錄。休眠從相關連接表中刪除多個多對多關係的數據
Parent_1:
@Entity
@Table
public class Parent_1 extends BusinessObject {
List<Child> children = new ArrayList<Child>();
public Parent_1() {}
public Parent_1(List<Child> children) {
this.children = children;
}
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "parent1_children", joinColumns = @JoinColumn(name = "parent1_id"), inverseJoinColumns = @JoinColumn(name = "child_id"))
@OrderColumn(name = "child_order")
public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}
}
Parent_2:
@Entity
@Table
public class Parent_2 extends BusinessObject {
List<Child> children = new ArrayList<Child>();
public Parent_2() {}
public Parent_2(List<Child> children) {
this.children = children;
}
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "parent2_children", joinColumns = @JoinColumn(name = "parent2_id"), inverseJoinColumns = @JoinColumn(name = "child_id"))
@OrderColumn(name = "child_order")
public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}
}
兒童:
@Entity
@Table
public class Child extends BusinessObject {
public Child() {}
}
我運行代碼有錯誤發生:
@Test
public void demoTest() {
Child child_1 = new Child();
Child child_2 = new Child();
save(child_1, child_2);
List<Child> children = new ArrayList<Child>();
children.add(child_1);
children.add(child_2);
Parent_1 parent_1 = new Parent_1(children);
Parent_1 parent_1_1 = new Parent_1(children);
save(parent_1, parent_1_1);
Parent_1 existingParent = dataAccessService.getParentById(new Long(1));
List<Child> newChildren = existingParent.getChildren();
Parent_2 parent_2 = new Parent_2(newChildren);
save(parent_2);
}
這是SQL正在爲最後的挽救執行:
Hibernate:
insert
into
Parent_2
(created, deleted, hidden, lastModified, id)
values
(?, ?, ?, ?, ?)
Hibernate:
delete
from
parent1_children
where
parent1_id=?
Hibernate:
insert
into
parent2_children
(parent2_id, child_order, child_id)
values
(?, ?, ?)
Hibernate:
insert
into
parent2_children
(parent2_id, child_order, child_id)
values
(?, ?, ?)
問題是與DELETE語句。爲什麼hibernate執行這個操作,我應該怎麼做才能阻止它的發生?
RGDS, 菲爾
注:BusinessObject的只是證明每個表的ID按:
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public Long getId(){
return id;
}
那麼我可能會問,爲什麼你在子列表上有一個'ManyToMany'註解?我沒有看到任何孩子回到父母身邊。 –
其實我只是限制了最初的例子,使它更易於閱讀。我添加了具有相同子項列表的第二個Parent_1的創建,以顯示對ManyToMany的需求。這個問題沒有什麼變化。 –
「save」方法有哪些?另外,什麼是交易界限? –