Как я очищаю и заменяю набор в связи "один ко многим" в Grails/Groovy

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

У меня есть связь "один ко многим" между двумя объектами области в моей модели в 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. Как я очищаю список во многих конец one-many набора?
  2. Как я связываю независимые объекты с родительским объектом и сохраняю их индивидуально?

Спасибо

11
задан Simon 15 January 2010 в 15:33
поделиться

1 ответ

-

Для № 1 вы можете очистить коллекцию (это набор по умолчанию):

activePerson.locations.clear()

Для Addtolocations

activePerson.locations.clear()

Используйте Addtolocations:

activePerson.addToLocations(location)

и когда вы сохраняете человека, расположение <-> Отношения у человека будут обновлены.

8
ответ дан 3 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: