Dados de classe embedded não estão sendo armazenados no banco de dados corretamente...
05/08/2014 10:20
0
Olá amigos,

Estou seguindo o seguinte exemplo para entender sobre embedded domains: Your text to link here...

Coloquei a classe Contry sob o diretório src/groovy dentro de um pacote de mesmo nome do pacote para o domain Person:

1) Domain Person:

package myPackage

class Person {

String name
Country bornInCountry
Country livesInCountry

static embedded = ['bornInCountry', 'livesInCountry']

static constraints = {
bornInCountry nullable:true
livesInCountry nullable:true
}



static mapping = {
tablePerHierarchy false
}


}

2) Class Country:

package myPackage

class Country {
String iso3
String name
}


3) Executei o comando grails GenerateAll myPackage.Person na linha de comandos.

4) Executo a aplicação e preencho os campos da tabela Person:



5) Porém, a base de dados apresenta dos dados referentes ao Country concatenados no campo Name da tabela Person. Vale lembrar que o campo name neste caso deveria estar preenchido apenas com "Pedro Gentil":



6) Vejam como ficou o banco de dados:





---------------------------------
Os amigos teriam alguma ideia sobre o que estou fazendo de errado?

Obrigado,

Pedro Gentil


Tags: Embedded;database;domain;armazenamento


0
Oi Pedro,

Infelizmente os dados do BD não vieram na sua resposta, porém a idéia das classes de domínio embarcadas é esta mesmo. Os campos serão incluídos na tabela referente à classe que a contém.

Rola de postar aqui a estrutura da sua tabela? Um ponto importante é o nome dos campos. Podem ocorrer situações meio chatas quando o nome do campo na classe filha são iguais aos da classe pai, mas isto é coisa que vi ocorrer décadas atrás. :)


1
Olá Pedro,
Isto ocorre pq o scaffolding gera o GSP com o "name" e "value" do textfield errado.
Para resolver este problema basta substituir no seu _form.gsp os códigos
<g:textField name="iso3" value="${countryInstance?.iso3}"/>

por
<g:textField name="bornInCountry.iso3" value="${personInstance.bornInCountry?.iso3}"/>

só seguir esta mesma lógica para os outros 3 campos (bornInCountry.name, livesInCountry.iso3 e livesInCountry.name)

Abs,

05/08/2014 13:02


0
Olá Kico e Dyego,

Agradeço seu tempo para ajudar.

Kico - a imagem com o resultado dos selects no BD estão aí no post... uma informação importante: quando a classe é gerada do src/groovy a tabela representando a prorção embedded da informação não é criada; já quando é criada debaixo de domain, ela é criada. Tudo vai depender da necessidade da aplicação. Veja o post do Dyego - que interessante.

Dyego - vou conferir esta solução... então seria ainda um pequeno erro do Grails, certo?

Muito bom contar com vocês nesta jornada de aprendizado!

05/08/2014 13:17


0
Resolvido,

Exatamente conforme a colocação do Dyego. Obrigado!
06/08/2014 09:35



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