Estou com uma dúvida eu tenho uma classe abstrata que é Pessoa, duas classes estendem a classe pessoa que são PessoaFisica e PessoaJuridica, a classe PessoaJuridica possui alguns atributos a mais do que pessoa fisica, como seria a melhor abordagem para este mapeamento.
Obrigado galera, não estou conseguindo pensar na melhor abordagem para este mapeamento.
Mapeie pessoa como @MappedSuperclass e as demais como @Entity normalmente.
Dependendo do tipo de tabelas que você deseja, opte por uma das estratégias de Inheritance.
Eu fiz realizando com o MappedSuperclass, agora fiz um teste utilizando as mesma entidades só que com @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
e as duas geraram o mesmo resultado estou tentando descobrir qual a diferença vou dar uma olhada agora nos dois links que você me mandou acho que vão ajudar bastante
Se eu alterar a a entidade AbstractCliente e colocar apenas um @MappedSuperclass, o resultado final pelo menos no banco será o mesmo ? então qual a diferença das duas abordagens ?
drsmachado
Quando você define herança entre entidades e coloca isto para o hibernate, com a estratégia TABLE_PER_CLASS, ele irá criar uma tabela para cada classe que esteja na relação de herança.
Neste caso, mapear como @Entity ou @MappedSuperclass irá resultar no mesmo. Pois, todos os atributos acessados por getters e setters que estejam na classe abstrata, serão considerados colunas das classes que estendem dela. Porém, se ela estiver como @Entity, você deverá ter uma tabela a mais no banco de dados.