Mapeando campo id de 3 tabelas - hibernate

2 respostas
hibernatejava
BrunoPereira

boa noite pessoal!

bom, comecei a estudar spring boot e fazer um projeto que o professor oferece porem notei que não estava aprendendo direito então optei por fazer um projeto do zero me baseando no projeto do curso porem com algumas diferenças e incrementações e ate quero usalo como um portfolio se ficar descente. cheguei numa parte que fiquei quebrando a cabeça mas n consegui ir adiante, tenho 1 classe abstrata cliente e na minha aplicação podem existir 3 tipos de clientes:especial, potencial e comum. cada cliente pode ter 1 ou mais endereços e é ai que eu tenho o problema, eu queria mapear o id das 3 tabelas diferentes sendo um unico id entre as 3 tabelas, ex: client especial: id 1, client comum id: 2, client especial id:3 e assim por diante, minha ideia é que o id não se repita dentro da propria tabela e nem entre as mesmas para que eu conseguisse fazer o relacionamento entre os clientes e os endereços, teria alguma forma de fazer isso com o hibernate? ou se eu usar só uma classe concreta de cliente é melhor? desde ja agradeço se algm poder me dar uma luz

2 Respostas

darlan_machado

O que seria uma incrementação, no teu entendimento?

usá-lo

decente
Você já pensou em usar um corretor ortográfico?

Sim, tem. Embora eu odeie essa abordagem por achar totalmente desnecessário, você pode usar a sobrescrita de parâmetros, como exemplificado aqui. Também pode optar por definir uma estratégia de herança dos atributos que representam a chave primária, conforme exemplo.
Apenas lembrando que estas abordagens vão exigir que a classe Cliente não seja abstrata.

Porém, acho que você se confundiu ao escrever isso:

Visto que o atributo mapeado com a anotação @Id representa a chave primária de uma tabela (e é obrigatório, portanto, em classes mapeadas).
A melhos estrategia seria definir um enum, então:

public enum TipoCliente {
    ESPECIAL(1), COMUM(2), OUTRO_ESPECIAL(3);
}

Isso já garante que você seleciona o tipo de cliente, sem impedir que haja uma PK distinta e única (como mandam as formas normais de BD).

public class OCliente extends Cliente {
    @Id
    private Long id;
    @Enumerated
    private TipoCliente tipoCliente;
}
BrunoPereira

isso é simplesmente pra eu estudar, se eu inventar mais coisas pra botar nele eu vou ter q correr atras de material pra aprender então isso me serve

praq? se to digitando na corrida eu so releio por cima oq escrevi e fodas :wink:

vou dar uma olhada nisso e tentar implementar, valeu!

Criado 10 de janeiro de 2020
Ultima resposta 10 de jan. de 2020
Respostas 2
Participantes 2