Hibernate + Heranca

2 respostas
O

Olá ! Estou começando alguns estudos com hibernate, será que alguém pode me ajudar ? Estou com a seguinte dúvida de herança: tenho 4 classes conforme abaixo:

public class Pessoa { } // id com @GeneratedValue(strategy = identity)
public class PessoaJuridica extends Pessoa { } // tem cnpj, ie

public class Fornecedor extends PessoaJuridica { }
public class Cliente extends PessoaJuridica { }

Estou criando um cadastro de Pessoa Juridica que, na hora de gravar com hibernate, grava as tabelas Pessoa e Pessoa Juridica juntas. Até aqui ok.

Agora, queria poder pegar uma Pessoa Juridica que já existe no banco e transformá-lo em Fornecedor ou Cliente, mais ou menos como no codigo abaixo:

PessoaJuridica pessoaJuridica = pessoaJuridicaDao.get(PessoaJuridica.class, id);
Fornecedor fornecedor = new Fornecedor();

// seta informacoes do fornecedor

fornecedor.setPessoaJuridica( pessoaJuridica ); // problema eh que a Pessoa Juridica eh classe pai, como vou setar as informacoes dele aki ?

pessoaJuridicaDao.save( fornecedor );

Se alguem puder me dar alguma dica ou sugestao, ficarei muito grato :)

2 Respostas

glaucogoca

Olá ono.leo blz?

o hibernate tem a opção de anotação @Inheritance(strategy=InheritanceType.JOINED)

Suas tabelas filhas terão como PK uma chave estrangeira para a PK da tabela pai.
Ao salvar seu Fornecedor ou Cliente o hibernate irá salvar toda hierarquia automagicamente.

Nesse caso um simples Cast deve resolver o problema.

A referência da documentação está aqui.

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/

Espero ter ajudado.
Inté

O

Oopa, olá glaucogoca !

Muito obrigado por responder.

Então, o problema é que precisava criar um fornecedor apartir de uma PessoaJuridica já existente no banco.

Cara, perdão, eu não entendi o uso da CAST … tipo, eu tava fazendo assim:

PessoaJuridica pj = pessoaJuridicaDao.carregar(id);

Fornecedor f = new Fornecedor();

f.setCodigo( pj.getCodigo() ); // Propriedade da entidade PessoaJuridica
f.setCnpj( pj.getCnpj() ); // Propriedade da entidade PessoaJuridica
f.setRazaoSocial( pj.getRazaoSocial() ); // Propriedade da entidade PessoaJuridica

f.setPrazoDeEntrega( 15 ); // Propriedade da entidade Fornecedor
// ...

No caso, usando o CAST, não daria problema ? Por exemplo:

f = (Fornecedor) pj; // acho que vai dar ClassCastException ...

Bom, e a outra coisa é que na hora de salvar, quando faço fornecedorDao.save(fornecedor), ele acaba criando mais um registro na tabela Pessoa e Pessoa Juridica, sendo que na verdade eu queria que ele utilizasse o registro que já existe no banco …

Alguma idéia ?

Obrigado :slight_smile:

Criado 1 de março de 2010
Ultima resposta 1 de mar. de 2010
Respostas 2
Participantes 2