Этот вопрос состоит из двух частей: первая часть - это очистка списка, а вторая часть - назначение владельца объекту.
У меня есть отношение "один ко многим" между двумя объектами домена в моей модели в Grails. Отношение выглядит следующим образом:
class Person {
static hasMany = [authorities: Role, locations: Location]
}
class Location {
static belongsTo = Person
}
В моем приложении список locations
на Person
полностью обновлен и заменен новым списком в действии пользователя. Чем больше я получаю список объектов Location
, не зависимых от связанного Person
. Я разрешаю, к кому применить их, путем извлечения текущего зарегистрированного пользователя, который я называю activePerson
и подходит для моих целей.
Что я хочу сделать, это удалить все существующие местоположения на activePerson
и вставить все новые, связав их с activePerson
по мере того, как я иду. У меня есть куча свойств на Person
, которые я не хочу останавливать на этом этапе, поэтому я хочу избежать сохранения всего родительского объекта только потому, что изменили местоположение детей.
Я подумал об итерации в списке activePerson.locations
и удалив их один за другим и полагаясь на GORM/Hibernate, чтобы объединить запросы вместе и выполнить флеш в конце. Это кажется грубой силой, хотя это может сработать. Я ожидал, что будет метод clearLocations
или что-то подобное, но я не могу его найти.
Если я просто заменил activePerson.locations
новым списком и вызовом activePerson.save(flush:true)
, будет ли GORM обрабатывать удаление существующих строк?
Во-вторых, я хочу поместить новые объекты Location
на activePerson
. Снова я мог бы заполнить activePerson.locations
и сохранить все это, но я хотел бы избежать этого, если смогу. Я могу сохранить их индивидуально, но как я могу установить belongsTo
для каждого объекта Location
, когда я иду?
Итак, чтобы повторить:
- Как очистить список на многих концах коллекции "один ко многим"?
- Как связать независимые объекты с родительским объектом и сохранить их отдельно?
Спасибо