Na realidade não veja pq vc está criando uma novo id em pessoa_fisica, basta vc aproveitar o id de pessoa e pronto.
Segue um exemplo de como vc pode implementar herança:
No banco de dados tabela Pessoa:
CREATE TABLE PESSOA
(
ID SERIAL NOT NULL,
NOME VARCHAR(150) NOT NULL,
CONSTRAINT PESSOA_PKEY PRIMARY KEY (ID)
);
No banco tabela Pessoa_Fisica:
CREATE TABLE PESSOA_FISICA
(
ID INTEGER NOT NULL,
DATA_NASC DATE NOT NULL,
ESTADO_CIVIL VARCHAR(20) NOT NULL,
SEXO CHAR(1), --(M)MASCULINO (F)FEMENINO
TIPO_SANGUE VARCHAR(8),
FATOR_RH CHAR(1), --(+)POSITIVO (-)NEGATIVO
NACIONALIDADE VARCHAR(20),
NATURALIDADE VARCHAR(20),
ESCOLARIDADE VARCHAR(30),
PROFISSAO VARCHAR(50),
OBSERVACAO VARCHAR(100),
CONSTRAINT PESSOAFISICA_PKEY PRIMARY KEY (ID),
CONSTRAINT PESSOAFISICA_PESSOA_FKEY FOREIGN KEY (ID) REFERENCES PESSOA
);
Classe pessoa:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Pessoa
{
@Id
@Column (insertable = false)
@GeneratedValue (strategy = GenerationType.SEQUENCE, generator = "pessoa_id_seq")
private int id;
private String nome;
@OneToMany( cascade = { CascadeType.PERSIST })
private List<Endereco> enderecos = new ArrayList<Endereco>();
@OneToMany( cascade = { CascadeType.PERSIST })
private List<Contato> contatos = new ArrayList<Contato>();
@OneToMany( cascade = { CascadeType.PERSIST })
private List<Documento> documentos = new ArrayList<Documento>();
....
}
Classe Pessoa_Fisica:
@Entity
public class Pessoa_Fisica extends Pessoa
{
@Temporal(TemporalType.DATE)
private Date data_nasc;
private String estado_civil;
private char sexo;
private String tipo_sangue;
private char fator_rh;
private String nacionalidade;
private String escolaridade;
private String naturalidade;
private String profissao;
private String observacao;
...
}