Hibernate - Problemas com herança

4 respostas
gustavodelgado

Pessoal… estou com um problema ao trabalhar com herança no Hibernate.

Tenho uma classe “Pessoa” e uma classe “Funcionario” que herda de Pessoa.

Em meus testes, consegui fazer seus mapeamentos, inserir, alterar, etc. Agora me deparei com um caso que sei que vou precisar no sistema que é o seguinte:

Supondo que eu já tenho uma pessoa cadastrada e que ainda NÃO é um funcionário. Se futuramente ela entrar na empresa e se tornar funcionário, eu precisarei pegar seus dados de Pessoa, adicionar seus dados de Funcionário e salvar.

Tentei fazer isso ± da seguinte maneira:

Pessoa p = new PessoaService().selectById(1);
Funcionario f = new Funcionario();

BeanUtils.copyProperties(f, p);
        
f.setMatricula("123");
f.setDescricaoCargo("Diretor");
f.setDescricaoFuncao("Analista de Sistemas");
        
funcionarioService.saveOrUpdate(f);

Minha intenção seria que fosse atualizada a tabela de pessoas (caso mude algum dado) e que fosse inserido um novo registro na tabela de funcionários, com o código da pessoa e os dados adicionais… mas o Hibernate tenta fazer Update na tabela pessoas e Update também na tabela funcionários (ao invés de insert).

O que poderia fazer para resolver este problema?

4 Respostas

A

Você pode deletar o registro da tabela de Pessoa e inserir na tabela de funcionaria ai ele replicaria.

Alberto

gustavodelgado

alots_ssa:
Você pode deletar o registro da tabela de Pessoa e inserir na tabela de funcionaria ai ele replicaria.

Alberto

Humm, pode ser, mas acho meio ruim fazer isso… pois bem provavelmente existirão registros em outras tabelas com dependências (FK) em pessoas…

A

Estou passando pelo mesmo problema q vc gustavo.

E tenho outro tmb.
Quando tenho uma tabela com FK(relacionamento).
Exemplo:
uma tabela pessoa e uma tabela pessoa_acesso.

A tabela pessoa_acesso tem sua chave primaria e tmb fk relacionada aos ID de pessoa.

Quando vou adicionar
com os metodos semelhante ao do gustavo, o hibernate volta um erro.

Ja tentei adicionar uma pessoa nova e uma pessoa_acesso nova, usar uma existente,etc…
N sei oq pode ser… =/

gustavodelgado

afsrj:
Estou passando pelo mesmo problema q vc gustavo.

E tenho outro tmb.
Quando tenho uma tabela com FK(relacionamento).
Exemplo:
uma tabela pessoa e uma tabela pessoa_acesso.

A tabela pessoa_acesso tem sua chave primaria e tmb fk relacionada aos ID de pessoa.

Quando vou adicionar
com os metodos semelhante ao do gustavo, o hibernate volta um erro.

Ja tentei adicionar uma pessoa nova e uma pessoa_acesso nova, usar uma existente,etc…
N sei oq pode ser… =/

Bom, no seu caso não sei se mapeando o relacionamento com lazy=‘false’ (isso em xml) ele salvaria as duas ao mesmo tempo quando vc manda salvar pessoaAcesso por exemplo.

Se não salvar, vc terá que salvar primeiro a pessoa, adicionar esta pessoa na propriedade de pessoaAcesso - tipo pessoaAcesso.setPessoa(pessoa) - e depois salvar pessoaAcesso.

Criado 29 de novembro de 2006
Ultima resposta 29 de nov. de 2006
Respostas 4
Participantes 3