Как очистить и заменить коллекцию в отношениях один-ко-многим в Grails / Groovy

Этот вопрос состоит из двух частей: первая часть посвящена очистке списка, а вторая - назначению владельца объекта.

У меня есть отношение один ко многим между двумя объектами домена в моей модели в Grails. Отношения выглядят так ...

class Person {

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

class Location {

    static belongsTo = Person

}

В моем приложенииlocations список наPerson полностью обновляется и заменяется новым списком действий пользователя. Какие'S больше я получаю списокLocation объекты, независимые от связанныхPerson, Я решаю, к какому человеку применить их, извлекая текущего зарегистрированного пользователя, которого я называюactivePerson и хорошо для моих целей.

Что я хочу сделать, это удалить все существующие местоположения наactivePerson и вставьте все новые, связав их сactivePerson как я иду. У меня есть куча свойств наPerson который я неЯ не хочу сохранять на этом этапе, поэтому я хочу избежать сохранения всего родительского объекта только потому, что изменились дочерние местоположения.

Я думал об итерацииactivePerson.locations список и удаление их по одному и полагаясь на GORM / Hibernate для пакетирования запросов и сброса в конце. Это похоже на грубую силу, хотя это может сработать. Я ожидал, что там будетclearLocations метод или что-то подобное, но я могунайти его.

Если я просто заменюactivePerson.locations с новым списком и звонитьactivePerson.save(flush:true), GORM будет обрабатывать удаление существующих строк?

Во вторых хочу поставить новыйLocation объекты наactivePerson, Я снова мог заселитьactivePerson.locations и сохранить все это, но я бы хотел избежать этого, если смогу. Я могу сохранить их по отдельности, но как мне установитьbelongsTo на каждойLocation возражать как я иду?

Итак, резюмируем:

Как очистить список во многих концах коллекции «один ко многим»?Как связать независимые объекты с родительским объектом и сохранить их индивидуально?

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос