Escolar Documentos
Profissional Documentos
Cultura Documentos
import javax.persistence.Entity;
@Entity
public class Aluno
{
}
Existem 3 estratégias de mapeamento de
polimorfismo
Flexibilidad
@Entity
@DiscriminatorValue(“EMP")
public class Employee { … }
@Entity
@DiscriminatorValue(“STU")
public class Student { … }
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.
Uma tabela por classe concreta
◦ Cada classe concreta será armazenada em uma
tabela distinta
Uma tabela por classe concreta
◦ A classe abstrata Person não é mapeada
◦ As sub-classes são mapeadas como uma classe qualquer
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person { … }
@Entity
public class Employee extends Person { … }
@Entity
public class Student extends Person { … }
Uma tabela por classe concreta
◦ Cada classe será armazenada em uma tabela
◦ Estratégia mais “orientada à objeto”
◦ Necessita de mais joins entre tabelas para
recuperar dados.
◦ Não suporta muito bem associações polimórficas.
Uma tabela por classe
Uma tabela por classe
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Person { …}
@Entity
public class Employee { … }
@Entity
@PrimaryKeyJoinColumn(name=“Person_ID")
public class Student { … }
Uma tabela por classe
◦ Cada classe será armazenada em uma tabela,
inclusive a classe pai, sendo ela abstrata ou não.
◦ Necessita de um único join para recuperar os
dados.
◦ Pode impactar no desempenho de uma aplicação
devido ao número de joins que podem ser feitos
em uma hierarquia completa.
A primeira estratégia é a mais simples mas
restringe a utilização de not-null
◦ Utilizado quando a principal diferença entre as
diferentes sub-classes é seu comportamento,
possuindo quase o mesmo conjunto de propriedades
A segunda resolve o problema do not-null e da
diferença entre o conjunto de propriedades
◦ Mas apresenta problema com associação polimórfica
A terceira é a mais flexível
◦ Permite associações com classes abstratas
◦ Mas necessita de mais joins para recuperar dados
A anotação @Id define o identificador único
da classe
Toda classe deve declarar um identificador
obrigatoriamente
A anotação @GeneratedValue é utilizada
@OneToOne @OneToOne(mappedBy=“endereco”)
@JoinColumn public Pessoa getPessoa(){…}
public Endereço getEndereco(){…}
@ManyToMany(mappedBy=“pessoas") @ManyToMany(cascade =
public Collection getFuncoes(){…} { CascadeType.PERSIST,
CascadeType.MERGE })
@JoinTable
public Pessoa getPessoas(){…}
Arquivo persistence.xml
<persistence-unit name="praxis">
<properties>
<property name="hibernate.archive.autodetection“ value="class, hbm" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.connection.driver_class"
value="org.hsqldb.jdbcDriver" />
<property name="hibernate.connection.url"
value="jdbc:hsqldb:hsql://localhost:9001/" />
<property name="hibernate.connection.username" value="sa" />
<property name="hibernate.dialect"
value="org.hibernate.dialect.HSQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="create-dropk" />
</properties>
</persistence-unit>
Semelhante à classe Session do Hibernate.
Utilizada para persistir, excluir, recuperar
◦ persists(Object)
◦ remove(Object)
◦ find(Class<T>, Object)
◦ getReference(Class<T>, Object)
◦ createQuery(String)
◦ getTransaction()
Persistindo um objeto
EntityManager em = emf.createEntityManager();
Aluno a = new Aluno();
a.setNome("Vitor");
em.persist(a);
los no console