【问题标题】:How to delete object from many-to-many relationship entities如何从多对多关系实体中删除对象
【发布时间】:2019-05-13 06:24:46
【问题描述】:

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

实体dashboard和dashboardGroup都有多对多关系,查看以下代码:

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

【问题讨论】:

    标签: hibernate groovy micronaut


    【解决方案1】:
    if(params.id) {
       def dashboard = Dashboard.get(params.id)
       if (dashboard) {
           dashboard.dashboardGroups*.remove(dashboard)
           dashboard.delete()
     }
    

    【讨论】:

    • 给出此错误的上述解决方案 groovy.lang.MissingMethodException: No signature of method: com.ef.Domains.DashboardGroup.remove() 适用于参数类型:(com.ef.Domains .仪表板)
    • 什么类型的dashboardGroups?
    • 它是一个从领域类派生的对象。
    • 建议您在代码中包含一些解释。
    【解决方案2】:

    您应该为此使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多