gpt4 book ai didi

Hibernate:关于连接表的删除级联操作

转载 作者:行者123 更新时间:2023-12-02 02:12:31 25 4
gpt4 key购买 nike

我在两个实体“menu_groups”和“pages”之间存在多对多关系,如下所示

    public class MenuGroup {
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "menu_group_pages",schema="live",
joinColumns=@JoinColumn(name="menu_groups_id"),
inverseJoinColumns=@JoinColumn(name="pages_id"))
private Set<Page> pages = new HashSet<Page>();
}

public class Page {
@ManyToMany(fetch = FetchType.EAGER, mappedBy="pages",
cascade={CascadeType.MERGE})

private Set<MenuGroup> menuGroups = new HashSet<MenuGroup>();
}

如您所见,有一个连接表,它有两个 fk:menu_groups_id 和 pages_id。现在我想在这个连接表中为 fk 'pages_id' 添加删除级联操作。对于普通表,该语句类似于
    @OnDelete(action=OnDeleteAction.CASCADE)

我怎么能对连接表执行此操作?谢谢

最佳答案

您必须在数据库中手动设置级联选项,然后只需在托管页面对象上调用 remove 即可将其从链接表中删除。

OnDelete 注释应该在数据库中生成级联选项,但它似乎不适用于 ManyToMany ( HHH-4404 )

另一方面,如果您想避免进行任何架构更改,则只需删除 MenuGroup 和 Page 之间的关联。在您的 PageDAO(或您使用的任何抽象)中,您可以有一个删除关联的 remove 方法:

public void remove(Page page) {
for(MenuGroup menuGroup : page.getMenuGroups()){
menuGroup.getPages().remove(page);
}
session.remove(page);
}

关于Hibernate:关于连接表的删除级联操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12114688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com