Sim:
é o seguinte: o tempo inteiro você deve levar em consideração que está trabalhando com Groovy que, ao contrário do Java tradicional, é dinâmico. Eu posso adicionar atributos e métodos em minhas classes em tempo de execução.
Então, o que acontece: observe o código da minha classe de exemplo abaixo:
class Garagem {
static hasMany = [caminhoes:Caminhao]
}
Repare que eu estou declarando um atributo do tipo map (o hasMany). E eu não declaro na minha classe um atributo do tipo Collection (java.util.Collection) chamado caminhoes na minha classe.
Em tempo de execução, o Grails vai incluir um atributo chamado caminhoes na minha classe. Este atributo, como mencionei, é uma lista. Então, eu posso fazer coisas como o código abaixo:
def garagem = new Garagem()
garagem.caminhoes += new Caminhao(nome:"Caminhao 1")
garagem.caminhoes += new Caminhao(nome:"Caminhao 2")
garagem.save()
No código acima, eu estou adicionando dois caminhoes à minha garagem e, em seguida, chamando o método save. O Grails irá salvar os caminhões na tabela Caminhao (ou a que você definir no mapeamento customizado caso queira) e também a classe garagem na tabela correspondente e... também o relacionamento entre os multiplos caminhoes e a classe Garagem também.