Olá a todos!! tenho uma situação envolvendo herança e Jpa e gostaria que me ajudassem. Desenvolvi um sistema de cadastro de processos de contratação(licitação, contratação direta,srp e contrato) onde esses processos seguem um fluxo, onde o órgão envia o procedimento para o escritório de advocacia e o escritório devolve o processo com as devidas correções que devem ser feitas(revisão). O problema é que licitação, contração direta, registro de preço e contrato são entidades distintas mas todas elas são ter uma lista de revisões
Public class Licitacao{
Long licitcaoId;
String numero;
String ano;
String objeto
//outros atributos…
}
Public class ContratacaoDireta{
Long contratacaoDiretaId;
String numero;
String ano;
String objeto;
TipoContratacaoDireta tipoContratacao;
Licitacao licitacao;
//outros atributos
}
public class SRP{
Long srpId;
Private String numero;
Private String ano;
Private TipoAdesao tipoAdesao;
Private Licitacao licitacao;
//outros atributos
}
Public class Contrato {
Long contratoId;
String ano;
Private String numero;
//derivado de licitação, srp ou contratação direta
Private TipoContrato tipoContrato
//outros atributos
}
O problema é que cada uma destas classes acima poderão ter uma revisão associada, O JPA define várias estratégias de herança, no primeiro caso eu poderia ter uma única tabela de revisão,mas essa tabela não vai ser normatizada ela ia ter os 4 campos(licitação_id,srp_id,contratação_direta_id,contrato_id) e ainda teria o discriminador A estratégia de joined onde vou ter a tabela mãe (revisão) e as tabelas filhas(revisão_licitacao, revisão_srp,etc...) que do ponto de vista do sgbd é o ideal, mas já lique posso ter problemas de performance E a terceira que cada entidade vai representar uma tabela no banco de dados(*essa foi a implementaçao escolhida), a principio me pareceu a mais equilibrada, mas mesmo assim me incomoda bastante ter que criar as 4 entidades para cada tipo de revisão existente: RevisaoLicitacao,RevisaoContratacao,RevisaoSrp,RevisaoContrato, já que as classes são exatamentes iguais e só muda o objeto de origem
Class RevisaoLicitacao{
Integer id;
Licitacao licitação;
String texto;
}
Class RevisaoSrp{
Integer id;
Srp srp;
String texto;
}
Como todos os procedimentos tem numero/ano eu pensei em criar uma classe Processo e fazer com que Licitação,Srp,Contratação e Contrato herdassem de processo, ai eu teria apenas uma tabela de revisão ligada pelo processo_id, mas ai eu teria joins entre processo e as classes filhas podendo resultar em uma situação pior que a anterior. Vocês acham que segui o caminho correto? Como poderia melhorar o design dessa modelagem OO sem perder performance de banco de dados? Se for possível nesse caso como poderia utilizar composição no lugar da herança?