[HELP] Problema com herança
01/09/2009 00:00
0
Seguinte.. tenho as classes de dominio Cargo e Funcionario e juntamente com estas tenho na pasta "src/groovy" as classes Endereco e Pessoa, o que está acontecendo comigo é que ao herdar de Pessoa a classe Funcionario apresenta o seguinte erro:

Caused by: org.hibernate.MappingException: An association from the table cargo refers to an unmapped class: Funcionario


Quando herdo de Pessoa ele não gera uma tabela no banco de dados [PostgreSQL] que deve ser o porque do seguinte erro.

Mas quando eu removo o 'extends' ele roda normal gerando as devidas tabelas e salvando no banco de dados e tudo mais. gostaria de saber se a herança deve ser efetuada de outro modo, irei colar as seguintes classes que criei para vocês checarem, já estou à 3 dias com este erro e junto com ela veio uma puta dor de cabeça <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( --> haueuhaeuhauehaeh

Percebi que o kiko faz parte da comunidade e gostaria de agradecer a ele por ter mostrado as funções do Grails e como ele funciona através de suas video-aulas <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->

Bom.. sem mais vou colar logo as classes...

Domain Class:

Funcionario.groovy
class Funcionario extends Pessoa {

String rg
Date dataNascimento
float salario

static hasOne = [cargo&#58;Cargo]

static constraints = {
rg(blank&#58;false, nullable&#58;false)
dataNascimento(blank&#58;false, nullable&#58;false)
salario(scale&#58;2, blank&#58;false)
}

static mapping = {
table 'funcionario'
version false
id(generator&#58;'sequence',params&#58;[sequence&#58;'funcionario_sequence', column&#58;'cd_funcionario'])
rg column&#58;'rg'
dataNascimento column&#58;'dt_nascimento'
salario column&#58;'salario'
}

String toString() {
nome
}

}


Cargo.groovy
class Cargo {

String nome
String descricao

static belongsTo = [funcionario&#58;Funcionario]

static constraints = {
nome(blank&#58;false, nullable&#58;false)
descricao(blank&#58;false, nullable&#58;false)
}

static mapping = {
table 'cargo'
version false
id(generator&#58;'sequence',params&#58;[sequence&#58;'cargo_sequence', column&#58;'cd_cargo'])
nome column&#58;'nome'
descricao column&#58;'descricao'
}

def String toString() {
nome
}

}


e as classes que estão na pasta &quot;src/groovy&quot;..

Pessoa.groovy
class Pessoa {

String nome
String telefone
String cpf
String cnpj
Endereco endereco

String toString() {
nome
}

}


Endereco.groovy
class Endereco {

String rua
int numero
String bairro
String complemento
String cep
Cidade cidade

String toString() {
rua + ', ' + numero + ' - ' + bairro
}

}


Quem conseguir me dar uma ajuda, fico muito grato, de coração (L) <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->

OBS: Estou usando a versão 1.2-M2
Tags: Grails


0
Opa,

valeu furlanrapha! Pode esperar que em muito breve vem mais material por ai.

Com relação ao seu problema, estou dando uma olhada aqui e ainda não consegui entender direito o porquê deste seu problema.

Só uma dica: já buscou nos fóruns de suporte oficiais do Grails? Sugiro que você dè uma olhada no Jira deles, pois pode ser que seja um bug do próprio Grails (espero que não!)


0
Obrigado kiko, acabei de pesquisar no Jira mas não encontrei nada a respeito sobre este erro. <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->

1- Mas o modo que estou fazendo a herança esta certo?

2- Criando uma domain class para Endereco e Pessoa é errado certo? (só pra tirar minha dúvida)
Porque no domain só ficam as classes que serão persistidas :S

3- E se caso eu conseguir realizar a herança, farei as validações através das contraints na classe Funcionario certo?
01/09/2009 00:00


0
Por default o grails gera uma tabela unica para as classes em hieraquia e usa um discriminador(class) para identifica-las.

Como voce definiu propriedades nullable:false em funcionario isso pode querar a pessoa, pois a coluna sera not-null do banco e ao persistir pessoa o hibernate tentara colocar null no campo.

Nao acho que esse seja o seu problema, mas foi so um detalhe que percebi.

De uma olhada: <!-- m --><a class="postlink" href="http://grails.org/doc/1.0.x/guide/5">http://grails.org/doc/1.0.x/guide/5</a><!-- m -->. Object Relational Mapping (GORM).html#5.2.3 Inheritance in GORM
03/09/2009 00:00


0
Raphael, já havia olhado isto na documentação, porém o que ele quer dizer na documentação é a respeito de herança de domain class para domain class, no meu caso eu tenho somente uma domain class e uma classe groovy na minha pasta &quot;src/groovy&quot;.

Vou tentar ver a respeito das constraints pra ver se consigo algo e se caso conseguir vou postar aqui <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->

Mas por enquanto valeu pelas dicas. xD
03/09/2009 00:00


0
Nao tinha percebido isso.

Por que colocou sua classe de dominio no src/groovy?

É isso que queria fazer? @Entity abstract class Pessoa {}
04/09/2009 00:00


0
Não raphael, minha classe de domínio esta na pasta domain.

domain : Funcionario.groovy

src/groovy : Pessoa.groovy

está assim :]
04/09/2009 00:00


0
consegui fazer funcionar pessoal!! <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->

coloquei &quot;abstract class Pessoa&quot; e funcionou :]

agora tenho outro problema.. mas irei criar um novo tópico pra ele pq não é mais herança <!-- s:x --><img src="{SMILIES_PATH}/icon_mad.gif" alt=":x" title="Mad" /><!-- s:x -->
13/09/2009 00:00


0
opa furlanpha, desenterrei o tópico mas é porque acho essa dúvida bastante interessante... hoje precisei fazer exatamente uma classe java Pessoa na qual minhas classes de domínio herdavam ela e eram persistidas no BD, na versão grails 2.0 na precisei colocar a classe pai como abstract ela estando public mesmo consegui ser executada sem erro, a única diferença foi que nas classes pai (Java) além de setar meus atributos gerei seus respectivos get's e set's. Espero que esse tópico ajude mais alguém que tenha essa dúvida, porque ela é extremamente comum...
11/12/2012 20:13



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