Antecipadamente, agradeço a quem puder ajudar.
O problema que estou enfrentando é o seguinte: estou desenvolvendo um sistema utilizando o Postgresql e o Hibernate/JPA para persistir os objetos.
O Postgresql tem uma forma de fazer herança diretamente na criação das tabelas. Tomando como exemplo a criação de uma tabela mãe “TBPessoa” e uma tabela filha “TBPessoaFisica”, o código ficaria da seguinte forma:
CREATE TABLE public.“TBPessoa”(
id integer NOT NULL,
nome character varying(100),
CONSTRAINT pk_tbpessoa PRIMARY KEY (id)
);
CREATE TABLE public.“TBPessoaFisica”(
cpf character varying(14) NOT NULL,
) INHERITS(public.“TBPessoa”);
Como podem ver, logo após a definição da tabela “TBPessoaFisica” temos o o termo que informa que a mesma herda os atributos da tabela “TBPessoa” e isso é tudo que o Postgresql necessita.
Contudo, utilizando o JPA para fazer a herança, o que mais se aproxima do modelo descrito acima é a forma “JOINED” de herança. Mas esse tipo de herança do JPA, cria as tabelas com uma diferença, como visto no código abaixo:
CREATE TABLE public.TBPessoa(
id integer NOT NULL,
nome character varying(100),
CONSTRAINT pk_tbpessoa PRIMARY KEY (id)
);
CREATE TABLE public.“TBPessoaFisica”(
cpf character varying(14) NOT NULL,
id integer NOT NULL,
CONSTRAINT pk_tbpessoafisica PRIMARY KEY (id)
);
ALTER TABLE public.TBPessoaFisica ADD CONSTRAINT fk_tbpessoafisica FOREIGN KEY (id)
REFERENCES public.TBPessoa (id) MATCH SIMPLE
ON DELETE NO ACTION ON UPDATE NO ACTION;
Como podemos perceber, em vez de utilizar a cláusula de herança, própria do Postgresql, o JPA cria uma chave estrangeira para a tabela “TBPessoa” dentro da tabela “TBPessoaFisica”.
Bom, depois de toda essa explicação, o que eu gostaria de saber é se existe uma maneira de manter a forma de herança criada pelo Postgresql utilizando o JPA.