Como faço para limpar e substituir uma coleção em um relacionamento um-para-muitos em Grails / Groovy
Esta questão é em duas partes, a primeira parte é sobre a limpeza de uma lista e a segunda parte é sobre como atribuir um proprietário a um objeto.
Eu tenho um relacionamento um-para-muitos entre dois objetos de domínio no meu modelo no Grails. O relacionamento parece com isso ...
class Person {
static hasMany = [authorities: Role, locations: Location]
}
class Location {
static belongsTo = Person
}
No meu aplicativo olocations
lista emPerson
é completamente atualizado e substituído por uma nova lista em uma ação do usuário. O que é mais eu recebo a lista deLocation
objetos independentes do associadoPerson
. Eu resolvo para qual pessoa aplicá-los, recuperando o usuário atualmente logado, que eu chamo deactivePerson
e está bem para meus propósitos.
O que eu quero fazer é excluir todos os locais existentes noactivePerson
e inserir todos os novos, associando-os com oactivePerson
como eu vou. Eu tenho um monte de propriedades emPerson
que eu não quero persistir neste momento, então eu quero evitar salvar o objeto pai inteiro apenas porque os locais filhos foram alterados.
Pensei em iterar através doactivePerson.locations
lista e excluindo-os um por um e contando com GORM / Hibernate para agrupar as consultas e liberar no final. Isso parece força bruta, embora possa funcionar. Eu estava esperando que houvesse umclearLocations
método ou algo semelhante, mas não consigo encontrar um.
Se eu apenas substituir oactivePerson.locations
com uma nova lista e chamadaactivePerson.save(flush:true)
, o GORM manipulará a exclusão das linhas existentes?
Em segundo lugar eu quero colocar o novoLocation
objetos paraactivePerson
. Mais uma vez eu poderia preencher oactivePerson.locations
e salve a coisa toda, mas eu gostaria de evitar isso se eu puder. Posso salvá-los individualmente, mas como faço para definirbelongsTo
em cadaLocation
Objeto como eu vou?
Então, para recapitular:
Como faço para limpar uma lista no final de uma coleção de um para muitos?Como faço para associar objetos independentes a um objeto pai e persisti-los individualmente?obrigado