JPA/Hibernate duvida qual anotação usar para classes com herança

4 respostas
P

Olá,

uma duvia como fazer as anotações para as classes abaixo
onde no banco de dados tenho três tabelas:

  • Pessoa
  • Fisica
  • Juridica

e o campo que sei que vai jogar na classe fisica é o campo tipo_pessoa
que indica se é fisica ou juridica ???

Não sei como fazer as anotações e como o JPA/Hibernate será que classe
vai alimentar fisica ou juridica para a pessoa seleciona ???

se alguém puder me ajudar …

abs

class Pessoa{

   private int id;
   private String nome;
   private String tipo_pessoa;  ///onde pode ser F - Fisica   ou J- Juridica

}



class Fisica{

  private long id;
  private long nrCPF
  private long dataInscrição;
}

class Juridica{

  private long id;
  private long nrCNPJ;
  private long dataInscrição;
}

4 Respostas

G
import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.PrimaryKeyJoinColumn;

import javax.persistence.Table;

import javax.persistence.SequenceGenerator;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.Inheritance;

import javax.persistence.InheritanceType;
@Entity

@Table(name=Pessoa)

@SequenceGenerator(name=nome-seq, sequenceName=nome-seq)  se usar sequence

@Inheritance(strategy=InheritanceType.JOINED)

public class Pessoa {
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="nome-seq") -- se usar sequence
@Column(name="id")
private Long id;

@Column(name="nome", length=60)
private String nome;

@Column(name="dataInscricao")
private Date dataInscricao;

    ....
@Entity

@Table(name=Fisica)

@PrimaryKeyJoinColumn(name=id)

public class Fisica extends Pessoa {
@Column(name="nrCPF")
private String nrCPF;

    ...
@Entity

@Table(name=Juridica)

@PrimaryKeyJoinColumn(name=id)

public class Juridica extends Pessoa {
@Column(name="nrCNPJ")
private String nrCNPJ;

    ...

A coluna dataInscricao deve ficar na tabela Pessoa.

Espero que tenha ajudado.

W

Boa Tarde:

Estou iniciando meu aprendizado em JPA e começaram as duvidas. Segui a forma de gerar o @Generatedvalue etc. etc. … ai na minha classe nao estou setando valores para o campo ID. Quando vou persistir o objeto no banco da erro que a chave não pode ser nula. O que tenho q fazer para resolver esse problema?

Grato

P

um exemplo como estou usando por aki estamos gerando pro banco mysql onde o campo id já é incrementado no mysql …

não sei se vai te ajudar

@Entity
@Table(name="OPERATION")
public class UserOperation{

	@Id
	@GeneratedValue
	@Column(name = "OP_ID")	


-- tabela gerada

CREATE TABLE  operation(
  `OP_ID` bigint(20) NOT NULL auto_increment
  PRIMARY KEY  (`OP_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
P

obrigado guedesrj

Criado 22 de janeiro de 2009
Ultima resposta 13 de mar. de 2009
Respostas 4
Participantes 3