Mapeamento com herança

5 respostas
J

Gostaria de saber como implementar o seguinte caso no hibernate:
O código está extremamente reduzido…

// tabela
pessoa
 
funcionario
 id_pessoa


//classes
class Pessoa
{
  nome;
  end;
}

class Funcionario Extends Pessoa
{
  salario;
}

// consulta
Pessoa p = pessoa.consultar(1);
if (p instanceof Funcionario) {
  Funcionario f = (Funcionario) p;
  f.getSalario();
}

//cadastro
Funcionario f = new Funcionario();
Pessoa p = Pessoa.consultar(1);
f.associarAPessoa(p);
f.setSalario();
f.cadastrar()

Como mostrado ai em cima eu tenho uma classe Funcionario que extende a classe Pessoa.
Quando eu consultar Pessoa eu posso fazer casting para Funcionario se o mesmo estiver associado a Pessoa consultada.
Minha dúvida é também se esse arquitetura é a melhor…

5 Respostas

Mauricio_Linhares

Se isso é herança porque é que Pessoa se associa com Funcionário? Funcionário já não é uma pessoa não?

jgbt

dificil opinar assim mas, pq não um factory que ja retorne a implementação correta, e vc trabalha com a interface publica(Pessoa) com a implementação que vc quer, no caso Funcionario.

<EDIT>
putz, não vi que era em relação ao mapeamento no Hibernate.
</EDIT>

[]'s

F

Os mapeamentos seriam:

<?xml version="1.0"?> <?xml version="1.0"?>
J

É verdade, mas a questão é que eu tenho um cadastro de pessoas, depois eu cadastro em Funcionario.
Uma Pessoa pode ser uma Funcionário, Terceiro, Estagiário, Visitante.

Referente ao mapeamento vou testar.
O problema é na hora de consultar pessoa. O hibernate vai saber que tem uma funcionário associado a ela ?

Mauricio_Linhares

Claro que ele sabe :smiley:

http://www.hibernate.org/hib_docs/v3/reference/en/html/queryhql.html#queryhql-polymorphism

Se uma pessoa não pode se apenas Pessoa, então você coloca logo como uma das classes “filhas”, de preferência colocando pessoa como classe abstrata.

Criado 31 de maio de 2005
Ultima resposta 31 de mai. de 2005
Respostas 5
Participantes 4