我有两个类,比如Group和Person,它们具有在JoinTable中映射的ManyToMany-Relation。
如果我删除与某个组有关系的Person,我想从连接表中删除该条目(不删除该组本身!)。
如何定义级联注释?我没有找到真正有用的文档,但有几个未解决的董事会讨论...
public class Group {
@ManyToMany(
cascade = { javax.persistence.CascadeType.? },
fetch = FetchType.EAGER)
@Cascade({CascadeType.?})
@JoinTable(name = "PERSON_GROUP",
joinColumns = { @JoinColumn(name = "GROUP_ID") },
inverseJoinColumns = { @JoinColumn(name = "PERSON_ID") })
private List<Person> persons;
}
public class Person {
@ManyToMany(
cascade = { javax.persistence.CascadeType.? },
fetch = FetchType.EAGER,
mappedBy = "persons",
targetEntity = Group.class)
@Cascade({CascadeType.?})
private List<Group> group;
}
答案 0 :(得分:3)
级联不会清除剩余在内存中Person
对象上的已删除Group
的剩余引用。你必须手动完成。似乎级联应该这样做,但遗憾的是,这不是它的工作方式。
根据您问题中提供的信息,我认为您的Person
或Group
实体上不需要设置任何级联选项。这听起来并不像他们共享一个父/子关系,其中一个人的存在取决于另一个。这就是我希望看到一些级联选项的那种关系。
答案 1 :(得分:0)
我相信你想要的是:
cascade = CascadeType.ALL
要删除数据库关系,请从每个组中删除关联。从Group.persons集合中删除该人员,并从Person.group集合中删除该组,然后保留您的person对象。
答案 2 :(得分:0)
您可以专门在数据库上执行此操作(取决于您的数据库及其功能)。通过在关系表的外键上添加“on delete cascade”。