Этот вопрос находится в двух частях, первая часть об очистке списка, и вторая часть о присвоении владельца к объекту.
У меня есть связь "один ко многим" между двумя объектами области в моей модели в 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 для пакетной обработки запросов вместе и сброса в конце. Это походит на грубую силу, хотя она могла бы работать. Я ожидал там быть a clearLocations
метод или что-то подобное, но я не могу найти то.
Если я действительно просто заменяю activePerson.locations
с новым списком и вызовом activePerson.save(flush:true)
, GORM обработает удаление существующих строк?
Во-вторых, я хочу поместить новое Location
объекты на activePerson
. Снова я мог заполнить activePerson.locations
и сохраните все это, но я хотел бы избежать этого, если я могу. Я могу сохранить их индивидуально, но как я устанавливаю belongsTo
на каждом Location
возразите, когда я иду?
Таким образом резюмировать:
Спасибо
Для № 1 вы можете очистить коллекцию (это набор по умолчанию):
activePerson.locations.clear()
Для Addtolocations
activePerson.locations.clear()
Используйте Addtolocations:
activePerson.addToLocations(location)
и когда вы сохраняете человека, расположение <-> Отношения у человека будут обновлены.