Classes de domínio
31/08/2019 14:46
0
Prezados,

Estou usando o Grasil 4.

Eu não entendo muito bem como funcionam os relacionamento entre as classes de domínio do Grails e creio que a minha pergunta seja bem fácil para alguém que já tenha uma certa experiência no assunto.

Eu tenho duas classes Document e DocumentProperties. A classe DocumentProperties é uma "meta classe" e todo todo novo document será validado de acordo com um identficador do DocumentProperties. Ou seja, quando eu inserir um novo documento na base, eu preciso do identificador do DocumentProperties para a realização de uma validação das informações que estão em Document.

Eu posso criar um novo DocumentProperties e ele não ter nenhum Document associado.

Entretanto, eu não posso criar um Document, sem que haja um e somente um DocumentProperties para validá-lo.

Como é que eu faço isso? Eu fico meio confuso com aquelas restrições Belongs To, has One, Has many.  Eu preciso que as classes de domínio disparem uma exceção para mim caso alguém cadastre um Document com um identificador de DocumentProperties que não exista.

Creio que isso seja muito fácil, mas é ignorância minha mesmo. Acho que algum de vocês deve saber esta resposta.

Obrigado.
Tags: Grails, relacionamentos de classes de domínio


0
Olá Alfredo.
Acredito que sua questão esteja mais relacionada com a modelagem de dados que você vai usar.
Qual tipo de relacionamento existe entre  Document e DocumentProperties? 1-N, 0-N, N-N. Com esta resposta ficará mais fácil definir.
Uma ideia seria que dentro do domínio de Document você pode ter um  campo simples do tipo DocumentProperties e forçar nas constraints para que ele seja preenchido...

....
 DocumentProperties minhasPropriedades
....
02/09/2019 11:23


0
Pedro Gentil,

Primeiramente obrigado pela resposta. Segue o modelo.



Cada DocumentProperties pode ter 0 ou * documentos associados. Mas cada Document só pode ter 1 e somente 1 DocumentProperties associado.

Eu queria um exemplo de código pra consegui fazer esta restrição. Quando eu salvar um Document, eu preciso que ele garanta que existe um DocumentProperties associado. E quando eu insiro um DocumentProperties, não é necessário fazer nenhuma avaliação, pode salvar direto.

Muito obrigado Pedro, de verdade.

Atenciosamente,

Afredo
02/09/2019 15:11


0
Olá Alfredo,

Para expressar a relação (1 - N) entre suas tabelas você pode criar as classes da seguinte maneira:

class DocumentProperties {
?// atributos 
??static hasMany = [document: Document]
}

?class Document {
?// atributos
?static belongsTo = [? documentProperties: DocumentProperties]
   ??static constraints = {
documentProperties nullable: false
}

}

A tabela document terá a chave estrangeira document_properties_id referenciando o document properties associado a ela. Declarando como nullable false será obrigatório o preenchimento do campo no momento da criação.

Espero ter ajudado.
06/09/2019 14:59



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