Как удалить объект из сущностей отношения многие ко многим - PullRequest
0 голосов
/ 13 мая 2019

Я хочу удалить одну панель мониторинга, а также проверить, присутствует ли она в списке dashboardGroup, а затем удалить ее из группы панелей мониторинга.

Обе сущности 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() 
}

Ответы [ 2 ]

0 голосов
/ 13 мая 2019

Вы должны использовать OrphanRemoval для этого. Eg.:

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.

0 голосов
if(params.id) {
   def dashboard = Dashboard.get(params.id)
   if (dashboard) {
       dashboard.dashboardGroups*.remove(dashboard)
       dashboard.delete()
 }
...