Opa Kiko,
Estou seguindo o userguide e faço NxN em outros trechos normalmente.
O problema é que tenho um Domain Videoconferencia que precisa fazer NxN de forma independente com 4 outras tabelas.
V x Materiais
V x Locais
E não é permitido declarar belongsTo = Local, Material etc.
Pelo visto vou ter fazer o mapeamento explícito do joinTable ou criar as tabelas NxN de outra forma.
Não, não precisa de outros campos. É puro NxN.
Vlw
Felipe,
Também sou iniciante, mas quero dar meus pitacos rss.. talvez saia alguma(s) besteira(s), massss... a intenção é positiva rsss..
A sintaxe do belongsTo para fazer mais de um relacionamento em linha poderia ser feito da seguinte forma:
O "static belongsTo = [local:Local, material:Material,periodo:Periodo]"
MAAASSSSS não acho que é isso o que vc realmente necessita.
O belongsTo faz com que a coisa dentro do [] seja dependente da instancia da classe que vc está usando esse relacionamento. Se por exemplo vc excluísse um Local, iria excluir também todas as videoconfs, porque a videoconf é de um Local....
Será que o que vc precisaria não é do hasMany?
videoconf has many local(is), material(is), periodo(s)
local has many videoconf(s)
material has many videoconf(s)
olha no link que o henrique te passou...
basicamente a sintaxe é
"static hasMany = [locais:Local, periodos:Periodo, materiais:Material]"
Vc terá que mapear esses relacionamentos em todas as suas classes e já aproveita pra definir os construtores dos quais não poderão ser nulos...
Espero ter ajudado um pouco =)
Abraço e boa sorte!
Ola Rafael, ..... omitirei o sinal de igual nos exemplos pq no teclado do celular nao tem....
Vamos la, a intencao é aprendermos mais sobre grails. A anatomia de uma relacao Muito-para-Muitos (NxN) é a mostrada no userguide...
Primeiro voce declara o tem muitos em ambas classes.
hasMany materiais
HasMany videoconferencias
So que uma das classes precisa ser owner.
Como videoconferencia tem muitos materiais, tenho de declarar...
BelongsTo materiais ... em videoconferencia
Ou seja, a partir do owner a outra classe vai ser adicionada...
videoconferencia.addToMateriais(Material.read(params.material))
Ate aqui, o userguide funciona.
So que no meu caso, videoconferencia tem relacionamento NxN com outras classes.
Eu teria de fazer Videoconferencia owner de Locais, periodos, etc.
Ai entra o problema do belongsTo ...
Static belongsTo Material, Local, Periodo ... é sintaticamente errado.
Static belongsTo [Material, Local, Periodo] ... é sintaticamente errado
BelongsTo Material
BelongsTo Local, etc é sintaticamente errado.
Ou seja, o grails so suporta NxN 1 vez por classe.
Desta forma, ou eu descubro uma maneira mais avancada de relacionar um domain com N outros domains via NxN ou terei de alterar minha modelagem forcando a declaracao da joinTable.
Isso implicaria em declarar explicitamente as tabelas
VideoconferenciaMaterial
VideoconferenciaLocal ... e por ai vai.
Sacou?
Isso eu resolvo no ORM do fw PHP que uso em 2 tempos, mas no grails esta me custando alguns dias de estudo de uma maneira menos POG de fazer.
O drama é esse.
Opa, vlw a atencao.
Estou na estrada agora mas à tarde darei um feedback.
Nao entendi o hasMany 3x .. visto que seria redeclaracao da variavel. Nao funciona.
E com relacao ao belongsTo .. eu ja havia tentando mas no grails 1.3.7 acontece o sseguinte:
BelongsTo [material:Material, local:Local] so é valido como 'pertece a' comum.
Ele nao aceitou como declaracao de owner pq vira variavel local.
Para owner so é valido 'belongsTo Domain', e apenas 1 domain.
Estas afirmacoes sao baseadas em testes auxiliado por usuarios grails mais experientes que eu. E foram testadas todas as alternativas.
Mais tarde escrevo um artigo explicando detalhadamente. Até lá espero poder apontar a solucao. Como deve ser algo que permanece no grails 2, acho que vai ser interessante.