JPA + persist com herança entre tabelas

6 respostas
furacao123

Como eu faço para passar no persist uma classe de herança, por exemplo

PessoaFisica extends Pessoa

quero gravar apenas os dados de Pessoa

public void grava(Pessoa p) {

  persist(p);

}

mas quem chama o metodo passa um pessoaFisica como parametro

PessoaFisica pf = new PesssoFisica();
pf.setNome("JOAO");

grava(pf);

como eu faço para o JPA gravar a Pessoa pois quando executo a aplicacao ele da uma exception

java.lang.IllegalArgumentException: Unknown entity: PessoaFisica

mas na verdade nao preciso dessa classe mapeda vamos supor q nao tenho no banco a tabela PessoaFisica tenho apenas pessoa e os valores de PessoaFisica nao herdados sao apenas para decoracao

como forço o JPA a gravar pessoa e nao tentar gravar PessoaFisica?

6 Respostas

L

Como é que esta a anotação nessas classes?

furacao123

entao por exemplo essa PessoaFisica na verdade nao eh um entity eh uma classe Adapter que extends Pessoa entao ela nao possui nenhuma anotacao e nao fica mapeado no persistence.xml ja a Pessoa esta anotada normal

@Entity @Table(name = "pessoa", catalog = "ct", schema = "teste")

se eu passo apenas Pessoa p para o persist grava normal o problema é quando passo um PessoaFisica pf pensei que o JPA transformace PessoaFisica em Pessoa altomaticamente

Obs: Esses exemplos de Pessoa e PessoaFisica sao apenas para demosntracao de conceito aqui no sistema sao tabelas bem mais complexas mas que no fim seguem a mesma logica de herança

dev.rafael

Isso ñ é possível. Se vc quer gravar uma entidade no banco o objeto passado p/ o persist precisa ser uma entidade, senão da pau.

furacao123

mas por exemplo como faço para popular um objeto Pessoa pegando os valores de um PessoaFisica

Pessoa p = new Pessoa();

        PessoaFisica pf = new PessoaFisica();
        pf.setCpf("123456789");
        pf.setNome("Filisbino");

        p = pf;

ao fazer isso eu tenho o objeto p com todos os atributos de Pessoa mas quando faço

p.getClass().getName();

ele mostra o nome da classe PessoaFisica pois eu apontei o objeto p em pf mas quando eu passo esse p para o persist do JPA ele entende como uma classe do tipo PessoaFisica e da o erro

dev.rafael

Não importa como vc chama pf ele sempre será um objeto do tipo PessoaFisica. Vc ñ pode mudar o tipo de um objeto. Ou vc se livra dessa herança ou vc transforma PessoaFisica em entidade.

furacao123

é vou fazer um adapter e transformar e popular um Pessoa a partir do PessoaFisica e passar pro JPA

Criado 29 de outubro de 2010
Ultima resposta 29 de out. de 2010
Respostas 6
Participantes 3