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