首页 > 解决方案 > 如何从多对多关系实体中删除对象

问题描述

我想删除一个仪表板并检查它是否存在于仪表板组列表中,然后也将其从仪表板组中删除。

实体仪表板和仪表板组具有多对多关系,请检查以下代码:

if(params.id){
     def dashboard = Dashboard.get(params.id)
     if (dashboard) {
        def dashboardGroups = dashboard.dashboardGroups
        for(DashboardGroup dashGroup : dashboardGroups){
           dashboard.removeFromDashboardGroups(dashGroup)
        }
        dashboard.delete() 
}

标签: hibernategroovymicronaut

解决方案


您应该为此使用 OrphanRemoval。例如。:

public class Dashboard {

    @ManyToMany
    @Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    private Set<DashboardGroup> dashboardGroups = new HashSet<DashboardGroup>();

}

当你尝试:

Dashboard dashboard = entityManager.find(Dashboard.class, 1L);
entityManager.remove(dashboard);

它将删除关联dashboardGroups的 .


推荐阅读