Buscar

06 - jpa

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

W W W. D OMI NAND OTI .COM.B R WWW.DOMINANDOTI .COM.BR 
JPA 
Professor Marcelo Pacote – @profmarcelopacote 
W W W. D OMI NAND OTI .COM.B R 
Acesse nosso site em 
WWW.DOMINANDOTI.COM.BR 
 Curta o Dominando TI no 
e receba nossas dicas sobre concursos! 
Cursos Turmas em Brasília, na sua cidade, e cursos online 
Livros Edições publicadas, lançamentos e promoções 
Fórum Interação direta entre estudantes e com os professores 
Simulados Questões inéditas, ranking de notas e correções em vídeo 
Blog Dicas e macetes de estudo, indicações de bibliografia, etc. 
Materiais Versões atualizadas de notas de aula e listas de exercícios 
W W W. D OMI NAND OTI .COM.B R 
Java Persistence API (JPA) 
 Adicionada na versão 3.0 da especificação EJB. 
 Apesar da JPA ter sido lançada como parte da especificação 
EJB 3, pode ser utilizada mesmo em projetos que não utilizem 
EJB. Java SE, por exemplo. 
 A JPA lida com a forma que os dados relacionais são mapeados 
para objetos Java (“entidades de persistência”) e a forma que 
estes objetos são armazenados em um banco de dados 
relacional. 
 Padroniza o mapeamento objeto-relacional, permitindo que 
diferentes implementações compatíveis possam ser usadas, 
como são os casos das bibliotecas TopLink, EclipseLink, OpenJPA 
e Hibernate. 
Professor Marcelo Pacote - @profmarcelopacote 3 
W W W. D OMI NAND OTI .COM.B R 
Java Persistence API (JPA) 
 Para desenvolver uma aplicação com JPA é necessário: 
 Mapear classes de negócio em entidades de um banco 
 Definir uma unidade de persistência; 
 Definir um managed datasource (conexão com um banco de 
dados); 
 Há duas formas de mapear classes de negócio a entidades de um 
banco de dados: 
 XML; 
 Anotações; 
Professor Marcelo Pacote - @profmarcelopacote 4 
W W W. D OMI NAND OTI .COM.B R 
Definindo unidade de persistência 
 Uma unidade de persistência é uma referência a uma unidade de trabalho com um 
banco: 
 Definida no arquivo persistence.xml 
 Especifica se será usado hibernate, toplink ou outra implementação JPA, 
conexão com banco de dados, etc. 
<persistence> 
<persistence-unit name=“exemplojpa“ > 
<provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> 
<class>entidades.Cliente</class> 
<properties> 
 <property name="openjpa.ConnectionURL“ value="jdbc:postgre://localhost:5432/jpa"/> 
 <property name="openjpa.ConnectionDriverName" value="org.postgresql.Driver"/> 
 <property name="openjpa.ConnectionUserName“ value="postgres"/> 
 <property name="openjpa.ConnectionPassword" value="123456"/> 
 </properties> 
 </persistence-unit> 
 </persistence> 
Professor Marcelo Pacote - @profmarcelopacote 5 
W W W. D OMI NAND OTI .COM.B R 
Anotações Básicas 
 @Entity 
 Anota a classe como uma entidade persistente. É preciso 
ter um construtor sem argumentos 
 @Table(name = "forum" ) 
 Nome da tabela da entidade 
 @Id 
 Diz qual atributo é a chave primária. 
 @ManyToOne ou 
 @OneToMany ou 
 @OneToOne ou 
 
Professor Marcelo Pacote - @profmarcelopacote 6 
W W W. D OMI NAND OTI .COM.B R 
Exemplo de classe de entidade 
Nomes de tabelas de colunas são opcionais 
Professor Marcelo Pacote - @profmarcelopacote 7 
W W W. D OMI NAND OTI .COM.B R 
Como mapear herança? 
1) Uma tabela por classe concreta 
 Dados não normalizados 
 Depende de um UNION para consultas na superclasse. 
 Ideal para hierarquias horizontais 
2) Uma única tabela para toda hierarquia de classes 
 Utiliza discriminator para diferenciar elementos da hierarquia. 
 Queries são feitas em uma única tabela, que pode se tornar bastante grande. 
 Modelo mais simples. Modelo default. Ideal para hierarquias com poucas classes. 
3) Uma tabela por classe da hierarquia 
 Permite associações e consultas polimórficas 
 Dados normalizados. Sempre realiza join. 
 Usado em hierarquias de muitos níveis (verticais). 
 
 Professor Marcelo Pacote - @profmarcelopacote 8 
W W W. D OMI NAND OTI .COM.B R 
Mapeamento de relacionamentos – One-to-one 
@Entity 
 public class Cliente implements Serializable { 
 @OneToOne(cascade = CascadeType.ALL) 
 @JoinColumn(name="passport_id") 
 public Passporte getPassaporte() { ... } 
} 
@Entity 
public class Passaporte implements Serializable { 
 @OneToOne(mappedBy = "passaporte") 
 public Customer getCliente() { ... } 
} 
 Professor Marcelo Pacote - @profmarcelopacote 9 
W W W. D OMI NAND OTI .COM.B R 
Mapeamento de relacionamentos – One-to-Many 
@OneToMany(mappedBy=“responsavel") 
public Collection getDependentes() { 
 return dependentes 
} 
@ManyToOne 
@JoinColumn(name=“PESSOA_DEP") 
public Pessoa getResponsavel(){ 
 return responsavel 
} 
Pessoa Dependente0..*1 0..*1
+dependentes+responsavel
Professor Marcelo Pacote - @profmarcelopacote 10 
W W W. D OMI NAND OTI .COM.B R 
Relacionamentos – a questão da carga de dados 
Em atributos, associações e coleções em entidades é possível 
especificar o tipo de carga inicial. 
 
 Cargo imediata (eager fetching) 
 Default para one-to-one e many-to-one 
 
 Carga preguiçosa (lazy fetching) 
 Default para relacionamentos one-to-many e many-to-
many 
Professor Marcelo Pacote - @profmarcelopacote 11 
W W W. D OMI NAND OTI .COM.B R 
EntityManager 
 Um objeto do tipo EntityManager controla o acesso ao banco de 
dados; 
 Por exemplo, EntityManager.persist(object) irá persistir um POJO 
object no banco; 
 Com um EntityManager pode-se também recuperar ou remover um 
objeto no banco 
 Cliente cliente = em.find( Cliente.class, cpf ); 
 Pode-se fazer consultas específicas: 
 em.createQuery("SELECT reg.login FROM Servidor reg 
ORDER BY reg.login").getResultList(); 
Professor Marcelo Pacote - @profmarcelopacote 12 
W W W. D OMI NAND OTI .COM.B R 
Igualdade X Identidade 
 Java  método equals 
 Banco de dados  mesmo registro de uma tabela 
 
 Em frameworks ORM, identidade e igualdade de entidades estão 
diretamente relacionados a caching, locking e transações. Para um 
contexto de persistência, podem surgir problemas quando esses 
conceitos entre Java e bancos de dados relacionais não são 
equivalentes. 
 
 Reimplementar os métodos equals e hashCode 
Professor Marcelo Pacote - @profmarcelopacote 13 
W W W. D OMI NAND OTI .COM.B R 
Consultas 
 API Criteria 
 Solução para criação dinâmica de consultas. 
 
 JPQL: 
 SELECT c.name, a 
 FROM Account a JOIN a.customer c 
 WHERE c.city = :city 
 
 É possível executar consultas SQL nativas através da API EntityManager
 
Professor Marcelo Pacote - @profmarcelopacote 14 
W W W. D OMI NAND OTI .COM.B R 
Exercício [8] (MPU/2010/CESPE/Técnico) 
( ) A API de Persistência Java é embasada em ideias contidas 
em frameworks líderes de mercado, como Hibernate, Oracle 
TopLink e Objetos de Dados Java. 
 
Professor Marcelo Pacote - @profmarcelopacote 15 
W W W. D OMI NAND OTI .COM.B R 
Exercício [9] (TRE-MT/2010/CESPE/Analista) 
( ) JPA lida com a forma como dados relacionais são 
mapeados para objetos Java e com a forma como esses objetos 
são armazenados em um banco de dados relacional. 
 
Professor Marcelo Pacote - @profmarcelopacote 16 
W W W. D OMI NAND OTI .COM.B R 
Exercício [10] (TRE-MT/2011/FCC) 
Professor Marcelo Pacote - @profmarcelopacote 17 
W W W. D OMI NAND OTI .COM.B R 
Exercício [10] (TRE-MT/2011/FCC) 
Em relação à JPA (Java Persistence API) é INCORRETO afirmar que 
 
a) @NamedQuery é aplicada para definir várias consultas. 
b) @Entity define que haverá correspondência da classe comuma tabela do banco 
de dados. 
c) @Id define que o atributo que está mapeado com tal anotação corresponderá à 
chave primária da tabela. 
d) @Column(name = "id", nullable = false) define que o atributo da classe 
mapeado com tal anotação deve estar associado à coluna cujo nome é "id", além 
de definir que tal campo não pode ser nulo. 
e) @OneToMany indica que o atributo contém um conjunto de entidades que a 
referenciam. 
 
Professor Marcelo Pacote - @profmarcelopacote 18 
W W W. D OMI NAND OTI .COM.B R 
Gabarito 
[1] d 
[2] b 
[3] e 
[4] ee 
[5] c 
[6] ee 
[7] e 
[8] certo 
[9] certo 
[10] a 
 Professor Marcelo Pacote - @profmarcelopacote 19

Outros materiais