Этот вопрос состоит из двух частей: первая часть посвящена очистке списка, а вторая - назначению владельца для объекта.
У меня есть отношение один ко многим между двумя объектами домена в моей модели в 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
объекта на ходу?
Итак, резюмируем:
- Как очистить список во многих концах коллекции «один ко многим»?
- Как связать независимые объекты с родительским объектом и сохранить их индивидуально?
Спасибо