を削除し、私のデータモデル(簡体字)、順序は、ここでのクエリ
public class AddressBook {
private List<Group> groups = new ArrayList<Group>();
private List<People> peoples = new ArrayList<People>();
@OneToMany(mappedBy = "addressbook", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<Group> getGroups() {
return groups;
}
@OneToMany(mappedBy = "addressbook", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@OnDelete(action = OnDeleteAction.CASCADE)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<People> getPeoples() {
return peoples;
}
}
public class Group {
private AddressBook addressBook;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
public void setAddressBook(AddressBook addressBook) {
this.addressBook = addressBook;
}
}
public class People {
private AddressBook addressBook;
private Group group;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
public AddressBook getAddressBook() {
return addressBook;
}
public Group getGroup() {
return group;
}
}
である私は私のアドレス帳から完全なグループを削除すると、このグループに属するすべての人々。だから私のような何かを:
adressBook.getPeople().removeAll(peopleBelongingToGroupA);
adressBook.getGroups().remove(groupA);
しかし、私のトランザクションがコミットされたときに、Hibernateはまずありません:
代わりに最初の人々を削除するdelete from groups where groupName='groupA';
。そのため、人とグループの間のFOREIGN_KEY制約が違反されます。
最初に人を削除してからグループを削除するには、休止状態にする方法はありますか?私のモデルに欠陥がありますか?すなわち、カスケード= "削除":
グループと人物の間でカスケード削除を追加するにはどうすればよいですか? –