Dificuldades com as ligações entre classes de domínio.
02/05/2017 15:16
0
Olá, estou enfrentando algumas dificuldades quanto tento relacionar classes de domínio.
Estou tentando criar um formulário da seguinte forma:

Classe de Minerais que pertence a classe Produtos, que por sua vez pertence a Classe Bens. Meu objetivo é que cada uma dessas classes forme um formulário que recolhe informações sobre cada classe. 

Mas um produto é dependente de vários minerais e um bem depende de vários produtos. Em cada formulário deste eu desejo disponibilizar para o usuário escolher quais minerais cadastrados pertencem a um produto.  E o mesmo para a classe bem.

Mas até então não consegui mesmo relacionando as classes da forma que esta nó código abaixo:

class Minerais {
static belongsTo = Produto // Minerais pertencem a Produto
String Nome
// Demais informações sobre o mineral...//?




class Produto {
static belongsTo = Bem // Pertence a Bem
static hasMany = [minerais:Minerais] // Ligação de um para muitos com Minerais
String nome
// Demais informações sobre o produto...//?



class Bem {
static hasMany = [produtos:Produto] // Ligação de um para muitos com Produtos
String nome
// Demais informações sobre o Bem...//?



Quando eu gero a view com o genertate-all não aparece a listagem de minerais quando tento cadastrar um produto, nem a listagem de produtos quando tento cadastrar Bens.

Como resolver isto??

Se eu coloco hasMany em todas as classes a listagem aparece mas nao da forma que desejo. Pois em minerais aparece a listagem de produtos e em produtos a listagem de bens.
 Abaixo esta o código para quando aparece a listagem mas de forma indesejada:

class Minerais {
static belongsTo = Produto
static hasMany = [produtos:Produto]
String Nome
// Demais informações sobre o mineral...//?


class Produto {
static belongsTo = Bem
static hasMany = [minerais:Minerais]
String nome
// Demais informações sobre o produto...//?


class Bem {
static hasMany = [produtos:Produto] // Ligação de um para muitos com Produtos
String nome
// Demais informações sobre o Bem...//?


Desde já obrigado, caso a dúvida não tenha ficado clara posso esclarecer melhor.


 
Tags: Classes de domínio,Grails,ligações entre classes, MVC


0
Fala Lucas bom dia. Vou tentar te explicar como eu entendi o problema:
Tens o seguinte cenário:
BEM [1] <-> MATERIAIS

Se eu entendi corretamente, você quer cadastrar um Bem e dentro dele já cadastrar os Produtos e no cadastro de Produtos já ter a possibilidade de cadastrar os Materiais dele, é isso?
Se sim, eu acredito mesmo que o GRails não te dará essa opção default no scafolding, a menos que tu customize essa geração (não sei como faz). O que o Grails vai te dar é no cadastro da classe filha vais ter um "ComboBox" com uma lista da classe pai, ou seja, na tela de cadastro de Materiais  vais ter um combo de Produto e na tela de cadastro de Produto vais ter um combo de Bem.

Isso é a "maneira Relacional" de pensar, pra eu ter um filho, eu preciso de um pai. Um filho só nasce de um pai, não tem como um pai nascer junto com seus filhos. Claro que isso é exclusivo ao BD, você pode mudar sua aplicação pra ela fazer "os filhos nascerem juntos com o pai", mas isso meramente visual, lá no fundo,  no teu banco de dados, o Bem sempre vai ser inserido primeiro que o produto.

O que eu quero dizer é que eu nunca vi o Grails gerar isso padrão, talvez tenha, mas eu desconheço, acho que terias que mudar a engine do teu scaffold pra gerar dessa forma pra ti.

Espero ter entendido corretamente, se não, apenas ignore :D

Abraços e sucesso no projeto.
12/05/2017 11:14


0
ERRATA:
BEM [1]  <->  MATERIAIS

OBS: Não sei porque foi errado no original.
12/05/2017 11:16


0
Cara, não estou conseguindo colocar o cenário... :(

Vou tentar mais uma vez (agora escrevendo):

BEM [1] <--> [MUITOS] PRODUTO [1] <--> [MUITOS] MATERIAIS

OBS: Acho que usei o * dentro dos colchetes e a engine do forum fez algo que não entendi. :P
12/05/2017 11:18


0
Muito Obrigado Adriano!  No fim tive que fazer as views na mão, realmente o Grails  não gera automaticamente as views da maneira que eu desejava. 


0
Fala Lucas. Então, como eu havia lhe dito, ele não gera por default, mas você pode manipular o scaffold pra fazer exatamente o que você quer, ele é configurável até onde eu sei.

Aqui mesmo no fórum existem muitos colegas que já alteraram o scaffold pra ficar da sua própria maneira, mas aí nesse ponto eu ainda não sei lhe ajudar. ;)

Abraços e sucesso no projeto.
23/05/2017 09:41



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto