首页 文章

JPA / Hibernate:ManyToMany删除关系

提问于
浏览
10

我有两个类,比如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 回答

  • 3

    级联 will not 清除剩余在内存中 Group 对象上的已删除 Person 的剩余引用 . 你必须手动完成 . 似乎级联应该这样做,但可悲的是,这不是它的工作方式 .

    根据您提问中提供的信息,我认为您不需要在 PersonGroup 实体上设置任何级联选项 . 它不是那种我希望看到一些级联选项的关系 .

  • 0

    我相信你想要的是:

    cascade = CascadeType.ALL
    

    要删除数据库关系,请从每个组中删除关联 . 从Group.persons集合中删除该人员并从Person.group集合中删除该组,然后保留您的person对象 .

  • 0

    您可以专门在数据库上执行此操作(取决于您的数据库及其功能) . 通过在关系表的外键上添加“on delete cascade” .

相关问题