Relacionamento entre classe com Grails
20/09/2011 20:49
0
Qual a diferencia entre :

class Manutencao_frota {

Caminhao caminhao <= Esta referencia

static hasMany = [caminhao: Caminhao] <= e esta ?

}
Tags: hasMany


1
Oi Mauricio,

a diferença é a seguinte: no primeiro caso, você está definindo uma relação pai-filho do lado filho, ou seja, você está dizendo que o seu objeto possui uma referência a um objeto do tipo Caminhao.

No segundo caso (hasMany), você está definindo uma relação pai-filho do lado pai, ou seja, vocÊ está dizendo que a sua classe referencia uma série de objetos. Então, você poderia ter uma classe chamada Garagem, tal como o exemplo abaixo:


class Garagem {
static hasMany = [caminhoes: Caminhao]
}


O que acontece: você está dizendo pro Grails algo assim:
"Oi GORM: é o seguinte: quero que em tempo de execução você adicione na minha classe Garagem um atributo chamado caminhoes. Ele é do tipo Collection e vai armazenar uma série de objetos do tipo Caminhao"

Ficou claro?


0
Blz, Kico entendi

Agora como eu utilizo para armazenar essas serie de objeto do caminhão ?

Valeu!!
20/09/2011 21:18


0
Opa. Como assim Mauricio?


0
Essa parte eu não entendi muito bem.

"Ele é do tipo Collection e vai armazenar uma série de objetos do tipo Caminhao"

Você poderia mim explicar ?
20/09/2011 21:24


1
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.


0
Oi Kiko,

Executei seu exemplo, veja o resultado:
// Classe Caminhão
package teste
class Caminhao {
String nome
}
// Classe Garagem
package teste
class Garagem {
static hasMany = [caminhoes:Caminhao]
}

Executando o código abaixo:

def garagem = new Garagem()
garagem.caminhoes += new Caminhao(nome:"Caminhao 1")
garagem.caminhoes += new Caminhao(nome:"Caminhao 2")
garagem.save()

Ocorreu o seguinte erro:
Exception: java.lang.NullPointerException: Cannot invoke method plus() on null object

Com o código abaixo, funcionou... Utilizando o método dinâmico "addTo":

def garagem = new Garagem()
garagem.addToCaminhoes(new Caminhao(nome: "Caminhao 1"))
garagem.save()



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