我有两个类,比如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;
}
3 回答
级联 will not 清除剩余在内存中
Group
对象上的已删除Person
的剩余引用 . 你必须手动完成 . 似乎级联应该这样做,但可悲的是,这不是它的工作方式 .根据您提问中提供的信息,我认为您不需要在
Person
或Group
实体上设置任何级联选项 . 它不是那种我希望看到一些级联选项的关系 .我相信你想要的是:
要删除数据库关系,请从每个组中删除关联 . 从Group.persons集合中删除该人员并从Person.group集合中删除该组,然后保留您的person对象 .
您可以专门在数据库上执行此操作(取决于您的数据库及其功能) . 通过在关系表的外键上添加“on delete cascade” .