JPA Herança
JPA (JAVA PERSISTENCE API)
... HERANÇA
PSC - Programação de Softwares Corporativos
Grande Capítulo: JPA/Hibernate
2
Parte 1: Modelagem Conceitual
Parte 2: Mapeamento de Objeto Relacional
Parte 3: Entity Manager – realização de operações
Parte 4: API de consulta – JPQL (HQL)
3
Parte 2:
Mapeamento Objeto-Relacional
- Herança
Mapeamento de Hierarquia de Classes
Mapeamento de Hierarquia de Classes
Existem 3 estratégias de mapeamento de hierarquia
Uma tabela para toda a hierarquia de classes
Uma tabela por classe concreta
e
Desempenh oFlexibilidad
Uma tabela por subclasse
Estratégia 1
Uma tabela para toda a hierarquia de classes
Toda a hierarquia de classes é representada por uma única tabela no banco de dados
Propriedades de uma subclasse específica não podem conter o atributo nullable=false: @Column(nullable=false)
Utiliza a anotação @DiscriminatorColumn para identificar a instância
Estratégia 1
Uma tabela para toda a hierarquia de classe
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name=“TYPE",
discriminatorType=DiscriminatorType.STRING) public class Person { …}
@Entity
@DiscriminatorValue(“EMP") public class Employee { … }
@Entity
@DiscriminatorValue(“STU") public class Student { … }
Estratégia 1
Uma tabela para toda a hierarquia de classe:
@Inheritance e @DiscriminatorColumn só devem ser utilizados no topo da hierarquia.
Caso não seja informado um name para o DiscriminatorType o default é DTYPE
Caso não seja informado um valor para o DiscriminatorValue o default é o nome da entidade, conforme definido na anotação
@Entity.
Estratégia 2
Uma tabela por classe concreta
Cada
classe concreta será armazenada em uma tabela distinta Estratégia 2
Uma tabela por classe concreta
A classe abstrata Person não é mapeada
As sub-classes são