Buscar

persistencia_01___introducao_ao_jpa_e_hibernate

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

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

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ê viu 3, do total de 29 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

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

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ê viu 6, do total de 29 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

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

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ê viu 9, do total de 29 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

Prévia do material em texto

PERSISTENCIA COM JAVA
Introdução a persistência com mapeamento OR 
JPA e Hibernate
Prof. Jaqson Dalbosco
jaqson@upf.br
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Persistência
• Persistência significa continuar a existir, preservar, durar longo
tempo ou permanecer. No contexto de programação orientada a
objetos, a persistência significa a possibilidade desses objetos
serem armazenados em meio externo à aplicação, portanto,
deverá permitir que esses objetos não sejam voláteis.
• Atualmente, os bancos de dados relacionais são o meio mais
utilizados para persistência de objetos em Java.
• Necessidade de mapeamento objeto-relacional.
2
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Mapeamento Objeto-Relacional
•Mapeamento objeto-relacional (ORM) é a técnica de mapear
dados de objetos para um BD relacional.
•Linguagens de Programação orientadas a objetos e SGBDs
relacionais = complexidade de implementação
3
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Requisitos
Para trabalhar persistência de objetos em SGBDs
relacionais com Java, é preciso:
a) implementar as classes de objetos de negócio (persistentes)
seguindo um Design Pattern (padrão de projeto) adotado pelos
frameworks de persistência;
d) implementar o mapeamento O-R definindo como os objetos
serão armazenados e recuperados de registros em tabelas do
banco de dados;
b) dispor de framework de persistêcnia que realize todo o trabalho
“pesado” da conversão O-R e persistência;
c) implementar a conexão com o BD (JDBC, unidade de
persistência)
d) ao implementar os códigos da aplicação, utilizar classes do
framework que permitem manipular os objetos no contexto
persistente.
4
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Classes de Objetos de Negócio Persistentes – JavaBeans
public class Ator implements java.io.Serializable {
private Integer id;
private String nome;
public Ator(){
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
}
5
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Classes dos objetos de negócio (persistentes)
Implementadas a partir do diagrama de classes de domínio do
negócio
6
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Framework Hibernate
O Hibernate é um framework para o Mapeamento Objeto-
Relacional (ORM) escrito na linguagem Java, mas também é
disponível em .Net como o nome NHibernate.
O termo mapeamento objeto-relacional (ORM) é a técnica de
mapear dados originalmente armazenados de forma relacional em
um modelo de objetos.
O principal objetivo do Hibernate é diminuir a complexidade
entre os programas Java, baseado no modelo orientado a
objeto, que precisam trabalhar com um banco de dados do
modelo relacional (presente na maioria dos SGDBs).
Sua principal característica é a transformação das classes em
Java para tabelas de dados e dos tipos de dados Java para
os da linguagem SQL.
7
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Framework Hibernate
¨ Permite uma persistência transparente para o desenvolvimento
das aplicações;
¨ facilita o mapeamento dos atributos entre uma base de dados
relacionais e o modelo de objetos de uma aplicação;
¨ Usa arquivos XML ou Anotações na próprias classes para
estabelecer esta relação.
¨ Está na terceira versão (maduro);
¨ É um software livre de código aberto distribuído com a licença
LGPL.
8
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Framework Hibernate
•Instalando o Hibernate Core Arquivos
9
antlr.jar
cglib.jar
asm.jar
asm-attrs.jars
commons-collections.jar
commons-logging.jar
hibernate3.jar
javassist.jar
jta.jar
dom4j.jar
log4j.jar
hibernate-annotations.jar
ejb3-persistence.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
JPA - Java Persistence API
- Consiste de um conjunto de interfaces e anotações que visam
padronizar o acesso aos frameworks de mapeamento O/R e se
baseia nas melhores idéias de tecnologias de persistência como Hibernate,
TopLink, e JDO.
- Solução completa para mapeamento e persistência de objetos:
modo declarativo de descrever mapeamento O/R, linguagem de consulta,
ferramentas para manipular entidades
- A JPA foi introduzida com a plataforma Java EE 5.
- Desenvolvida como parte da JSR-220 - Tecnologia EJB 3.0, a JPA se
integra homogênea e consistentemente com o resto das simplificações
nas APIs EJB 3.0
- Provê à comunidade Java uma única API padrão de persistência,
com a liberdade de escolha do provedor (implementação)
- Rapidamente os frameworks se adaptaram para funcionar como
provedores JPA, incluindo recursos que permitam utilizar o padrão JPA
para a construção de camadas de persistência
10
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Java Persistence API
11
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
JPA - Anotações
• A JPA define um meio de mapeamento Objeto-Relacional para
objetos Java simples e comuns (POJOS), por meio de anotações
incluídas nas classes.
“Basicamente, uma anotação é uma maneira de acrescentar
informações sobre uma parte do código (no mundo Java,
geralmente uma classe, um campo ou método) para ajudar as
ferramentas entenderem como o código está sendo utilizado ou
para permitir a automatização, poupando trabalho”. (Elliott, 2009)
12
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
JPA - Anotações
• Anotações com JPA
13
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
JPA - Anotações
• Anotações com JPA (continuação)
14
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
@Entity - Exemplo
Anotação associada a classes Java. Determina que a classe é
persistente.
15
Obrigatório
Obrigatório
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
@Id – Exemplo
Toda classe precisa ter um identificador, que será associado a
chave primária da tabela no banco de dados.
O atributo anotado com @Id será o identificador, tanto para as
instâncias de objetos da classe que está sendo mapeada como
para os registros da respectiva tabela no banco de dados.
16
Opcional
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Passos para criar uma aplicação Java com BD 
•Criar um Banco de Dados para o projeto(PostgreSQL, MySQL, ...);
•Criar um novo projeto Java (Aplicativo Java);
•Adicionar Biblioteca “Hibernate-JPA” no projeto;
•Adicionar driver JDBC no projeto;
•Criar uma Unidade de Persistência (criar conexão com o BD);
– Se usar o FirebirdSQL, adicionar no XML:
<property name="hibernate.dialect" value="org.hibernate.dialect.FirebirdDialect"/>
•Criar as classes de entidade – JavaBeans (do diagrama);
– Adicionar mapeamentos de persistência nas classes
(@Entity, @Id, @Column, @OneToMany, ...);
•Adicionar classes mapeadas na unidade de persistência;
•Para usar a Persistência (criar programa):
– Usar Persistence.EntityManagerFactory para criar uma instância
de EntityManager usando a Unidade de Persistência;
– Usar métodos de persistência da EntityManager (persist, merge,
remove, createQuery, ...).
17
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Arquivo de Configuração – Unidade de Persistência - Visual
18
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Quando usar Firebird, adicionar manualmente a linha para o
dialeto.
Arquivo de Configuração – Unidade de Persistência - XML
19
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Ciclo de vida das entidades
20
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Estados do ciclode vida das entidades
Estado Transient (Transitório)
Quando damos um new em uma entidade anotada com @Entity (objeto-entidade),
ela ainda não é reconhecida pelo JPA porque ela nunca passou pelo gerenciador de
persistência EntityManager. A entidade também não possui um ID e,
provavelmente, não existe no banco de dados. Neste caso, não há garantia alguma
de que os dados existentes no objeto-entidade serão persistidos no banco quando o
processamento do sistema terminar. Este estado é conhecido como Transient.
Estado Managed (Gerenciado)
O estado Managed é o estado onde o JPA reconhece a existência de um objeto-
entidade e, consequentemente, o JPA garante que esse objeto terá representação
idêntica no banco de dados. Isso significa que qualquer alteração que você fizer
nesse objeto será automaticamente persistido no banco. Um detalhe importante: o
fluxo de sincronização parte sempre do objeto para o banco de dados, nunca ao
contrário. Isso significa que o JPA não detecta alterações realizadas diretamente no
banco de dados.
21
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Estados do ciclo de vida das entidades
Estado Detached (Destacado)
A característica desse estado é que os objetos possuem um ID, provavelmente
possui a informação no banco, mas não está sendo gerenciado pelo EntityManager.
Se você também dar um new em um objeto-entidade e atribuir manualmente um
ID a ele, ele também torna-se um objeto destacado.
Um objeto managed, recuperado do banco e que foi destacado, pode sofrer
alterações em memór ia sem afetar os dados no banco de dados.
Estado Removed (Removido)
Removed é quando queremos excluir um objeto-entidade do banco. A característica
de um objeto removido é que ele possui um ID, não está mais gerenciado pelo
EntityManager e não está mais no banco de dados. Um objeto-entidade só pode ser
removido se estiver, primeiro, em um estado gerenciado.
22
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Criando uma EntityManager
Para criar uma fábrica de EntityManager:
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
"NomeUnidadePersistencia“);
Onde “NomeUnidadePersistencia” é o nome dado quando a
unidade de persistência é criada.
Para criar uma EntityManager:
EntityManager em = emf.createEntityManager();
Com o objeto em criado, pode-se então chamar os métodos de
persistência de objetos, conforme exemplos a seguir.
Uma boa prática é criar uma classe Singleton para obter
uma factory!
23
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Usando EntityManager para persistir um objeto
//Um objeto na memória:
Ator a = new Ator(1, "Julia Roberts");
// Armazenando o objeto no BD
em.getTransaction().begin();
em.persist(a);
em.getTransaction().commit();
ATENÇÃO: modificações no BD só ocorrem se uma transação foi
iniciada (em.getTransaction().begin();) antes de chamar o
método de persistência (em.persist(a);) e no final for executado
commit na transação (em.getTransaction().commit();).
A transação é necessária para uso com qualquer método de
persistência que for modificar os dados do objeto no BD.
24
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Usando EntityManager para carregar um objeto
// Carregar do BD um objeto pelo seu id
Ator a = em.find(Ator.class, 2);
// acessando os dados do objeto carregado
System.out.println(
"Código: "+a.getId()+
" Nome: "+a.getNome());
25
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Usando EntityManager para alterar um objeto
em.getTransaction().begin();
// carregar um objeto do BD
Ator a = em.find(Ator.class, 2);
// modificar o objeto
a.setNome("Ator Modificado");
em.getTransaction().commit();
•OBS: após o commit os dados do objeto são atualizados no BD!
26
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Usando EntityManager para remover um objeto
em.getTransaction().begin();
// carregar um objeto do BD
Ator a = em.find(Ator.class, 2);
// remover o objeto do BD
em.remove(a);
em.getTransaction().commit();
•OBS: após o commit, o objeto é removido do BD
27
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Usando EntityManager para listar objetos
// Recupera todos os objetos Ator do BD
Collection<Ator> lista =
em.createQuery("from Ator”).getResultList();
// percorre a lista de atores e lista seus
dados
for(Ator at: lista)
System.out.println(
" Código: "+at.getId()+
" Nome: "+at.getNome());
28
PERSISTÊNCIA COM JAVA
Mapeamento Objeto-Relacional (ORM)
Referências
• ELLIOTT J.; O’BRIEN T.M.; FOWLER R. Dominando Hibernate.
Tradução do original: Harnessing Hibernate. Rio de Janeiro:
AltaBooks, p.125, 2009.
• Mapeamento Objeto-Relacional com Hibernate. Profs.
Benefrancis do Nascimento e Jaime K. Ossada.
• JPA – Java Persistence API. Prof. Gilberto Irajá Muller
29

Outros materiais

Perguntas Recentes