Jak usunąć i zastąpić kolekcję w relacji jeden-do-wielu w Grails / Groovy

To pytanie składa się z dwóch części, pierwsza część dotyczy czyszczenia listy, a druga dotyczy przypisania właściciela do obiektu.

Mam relację jeden do wielu między dwoma obiektami domeny w moim modelu w Grails. Związek wygląda tak ...

class Person {

    static hasMany = [authorities: Role, locations: Location]
}

class Location {

    static belongsTo = Person

}

W mojej aplikacjilocations lista naPerson zostaje całkowicie odświeżony i zastąpiony nową listą akcji użytkownika. Co więcej, dostaję listęLocation obiekty niezależne od skojarzonychPerson. Rozstrzygam, do której osoby je zastosować, pobierając aktualnie zalogowanego użytkownika, do którego dzwonięactivePerson i jest w porządku dla moich celów.

Chcę usunąć wszystkie istniejące lokalizacjeactivePerson i wstaw wszystkie nowe, kojarząc je zactivePerson jak idę. Mam kilka właściwościPerson których nie chcę w tym momencie trwać, więc chcę uniknąć zapisywania całego obiektu nadrzędnego tylko dlatego, że zmieniły się lokalizacje dzieci.

Myślałem o przejściu przezactivePerson.locations lista i usuwanie ich pojedynczo i poleganie na GORM / Hibernate, aby połączyć w całość kwerendy i opróżnić je na końcu. To wydaje się być brutalną siłą, chociaż może zadziałać. Spodziewałem się, że będzieclearLocations metoda lub coś podobnego, ale nie mogę jej znaleźć.

Jeśli po prostu wymienięactivePerson.locations z nową listą i połączeniemactivePerson.save(flush:true), czy GORM obsłuży usunięcie istniejących wierszy?

Po drugie chcę umieścić noweLocation przedmioty naactivePerson. Znowu mogłem zaludnićactivePerson.locations i zapisz całą sprawę, ale chciałbym tego uniknąć, jeśli mogę. Mogę je zapisać indywidualnie, ale jak to ustawićbelongsTo na każdymLocation przedmiot, jak idę?

Podsumowując:

Jak wyczyścić listę na wielu końcach kolekcji jeden-do-wielu?Jak skojarzyć niezależne obiekty z obiektem nadrzędnym i utrzymywać je osobno?

Dzięki

questionAnswers(3)

yourAnswerToTheQuestion