introdução a jpa e hibernate - tdc 2012
DESCRIPTION
TRANSCRIPT
![Page 1: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/1.jpg)
Globalcode – Open4education
Trilha – Java EE UniversityFrederico Maia Arantes
Desenvolvedor de Software / Instrutor / Empreendedor
![Page 2: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/2.jpg)
Globalcode – Open4education
Introdução à JPA 2 e Hibernate
Produtividade persistindo dados em Java
![Page 3: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/3.jpg)
Globalcode – Open4education
Sobre mim
Frederico Maia Arantes
![Page 4: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/4.jpg)
Globalcode – Open4education
Agenda
Persistência de dados
O que é JPA?
O que é Hibernate?
Mapeando minhas entidades
Relacionamentos
Estratégias de herança
E agora, pra onde vou?
![Page 5: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/5.jpg)
Globalcode – Open4education
Persistência de dados
“A persistência de dados, na computação, refere-se ao armazenamento não-volátil de dados, por exemplo, o armazenamento em um dispositivo físico como um disco rígido. Quando se grava um arquivo no disco, por exemplo, o dado está sendo “eternizado”, ou seja, deixa de ficar volátil na memória RAM e passa a ser escrito num dispositivo que armazena a informação de modo que ela não despareça facilmente.” Wikipedia
![Page 6: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/6.jpg)
Globalcode – Open4education
Persistência de dados
Em Java e desenvolvimento de software em geral, persistência de dados significa gravar dados
Na enorme maioria dos casos, gravamos em bancos de dados relacionais (por enquanto)
Em contra partida, desenvolvemos orientados a objetos. Dois paradigmas bem diferentes
![Page 7: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/7.jpg)
Globalcode – Open4education
Persistência de dados
![Page 8: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/8.jpg)
Globalcode – Open4education
Persistência de dados
![Page 9: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/9.jpg)
Globalcode – Open4education
Persistência de dados
Relacional x Orientado a Objetos. Dois paradigmas bem diferentes. Como resolver as diferenças?
Como mapear as tabelas do banco de dados para os objetos Java?
Ou deveríamos mapear os objetos para as tabelas?
![Page 10: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/10.jpg)
Globalcode – Open4education
Surge o Super Hibernate!
![Page 11: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/11.jpg)
Globalcode – Open4education
O que é Hibernate?
Framework para mapeamento objeto relacional
Permite que desenvolvamos naturalmente no modelo orientado a objetos
Persistência transparente, simplificando e agilizando o desenvolvimento
Independente de banco de dados
![Page 12: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/12.jpg)
Globalcode – Open4education
O que é Hibernate?
Mantido pela JBoss e comunidade Java
Não faz parte da especificação padrão Java
E se a JBoss parar de desenvolver o projeto? Como ficamos? Queremos continuá-lo! Queremos que ele se torne um padrão Java!
![Page 13: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/13.jpg)
Globalcode – Open4education
O que é JPA?
Java Persistence API, especificação de persistência de dados em Java
Baseada nos principais frameworks do mercado como o Hibernate
É uma especificação! Precisa de uma implementação como Hibernate, TopLink e EclipseLink.
JPA e Hibernate não são a mesma coisa!
Show me the code!
![Page 14: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/14.jpg)
Globalcode – Open4education
Inserindo dados sem JPA
![Page 15: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/15.jpg)
Globalcode – Open4education
Inserindo dados com JPA
![Page 16: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/16.jpg)
Globalcode – Open4education
Buscando dados sem JPA
![Page 17: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/17.jpg)
Globalcode – Open4education
Buscando dados com JPA
![Page 18: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/18.jpg)
Globalcode – Open4education
Mapeamento
Mapear o modelo orientado a objetos e o modelo entidade relacionamento
@Entity: aparece antes do nome das classes que terão objetos persistidos no BD
@Id: indica a chave primária
@GeneratedValue: indica que o valor da chave primária deve ser gerado pelo BD quando um registro é inserido
![Page 19: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/19.jpg)
Globalcode – Open4education
Classe Java comum
![Page 20: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/20.jpg)
Globalcode – Open4education
Classe Java com JPA
![Page 21: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/21.jpg)
Globalcode – Open4education
Operações básicas
Persistindo: Pessoa p = new Pessoa(“Fred”);
manager.persist(p);
Buscando: manager.find(Pessoa.class,1L);
manager.getReference(Pessoa.class,1L);
Removendo: manager.remove(Pessoa.class,1L);
![Page 22: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/22.jpg)
Globalcode – Open4education
Operações básicas
Atualizando: Pessoa p = manager.find(Pessoa.class, 1L);
p.setNome(“Novo Nome”);
manager.persist(p);
Listando: Query query = manager.createQuery(“select p from Pessoa p”);
List<Pessoa> pessoas = query.getResultList();
![Page 23: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/23.jpg)
Globalcode – Open4education
Relacionamentos
Os relacionamentos entre as entidades de um domínio devem ser expressos na modelagem através de vínculos entre classes. Podemos definir quatro tipos de relacionamentos de acordo com a cardinalidade.
One to One
One to Many
Many to One
Many to Many
![Page 24: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/24.jpg)
Globalcode – Open4education
Relacionamentos
One to One: por exemplo, um estado é governado por apenas um governador e um governador governa apenas um estado.
@Entity
public class Estado {
@OneToOne
private Governador governador;
}
![Page 25: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/25.jpg)
Globalcode – Open4education
Relacionamentos
One to Many: por exemplo, um departamento possui muitos funcionários e um funcionário trabalha em apenas em um departamento.
@Entity
public class Departamento {
@OneToMany
private List<Funcionario> funcionarios;
}
![Page 26: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/26.jpg)
Globalcode – Open4education
Relacionamentos
Many to One: por exemplo, um pedido pertence a apenas um cliente e um cliente faz muitos pedidos.
@Entity
public class Pedido {
@ManyToOne
private Cliente cliente;
}
![Page 27: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/27.jpg)
Globalcode – Open4education
Relacionamentos
Many to Many: por exemplo, um livro possui muitos autores e um autor possui muitos livros.
@Entity
public class Livro {
@ManyToMany
private List<Autor> autores;
}
![Page 28: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/28.jpg)
Globalcode – Open4education
Relacionamentos
Relacionamentos bidirecionais: quando expressamos um relacionamento entre entidades colocando um atributo em uma das entidades, podemos acessar a outra entidade a partir da primeira.
Vamos ver um exemplo.
![Page 29: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/29.jpg)
Globalcode – Open4education
Relacionamentos
@Entity
public class Carro {
@OneToOne
private Motor motor;
}
@Entity
public class Motor {
@OneToOne(mappedBy = “motor”)
private Carro carro;
}
![Page 30: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/30.jpg)
Globalcode – Open4education
Estratégias de herança
Um conceito um pouco complexo, a princípio, de se mapear é o de Herança. A especificação JPA define três estratégia para realizar o mapeamento de herança.
Single Table
Joined
Table per Class
![Page 31: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/31.jpg)
Globalcode – Open4education
Single Table
A mais comum e a que possibilita melhor desempenho em relação a velocidade das consultas.
Será criada apenas uma tabela com o nome da super classe para armazenar os dados dos objetos.
![Page 32: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/32.jpg)
Globalcode – Open4education
Joined
Uma tabela para cada classe da hierarquia é criada. Em cada tabela, apenas os campos referentes aos atributos da classe correspondente são criados.
As tabelas correspondentes as sub classes possuem chaves estrangeiras vinculadas a tabela correspondente a super classe.
![Page 33: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/33.jpg)
Globalcode – Open4education
Table per Class
Uma tabela para cada classe concreta da hierarquia é criada.
Os dados de um objeto não são colocados em tabelas diferentes. Para remontar um objeto não é necessário realizar operações de join.
A desvantagem é que não existe um vínculo explícito no banco de dados entres as tabelas.
![Page 34: Introdução a JPA e Hibernate - TDC 2012](https://reader034.vdocuments.net/reader034/viewer/2022051109/54967031ac7959222e8b50f5/html5/thumbnails/34.jpg)
Globalcode – Open4education
E agora pra onde vou?
http://docs.oracle.com/javaee/
Apostilas da K19
Blog e apostilas da Caelum
Livro: Java Persistence With Hibernate
Documentação oficial do Hibernate
Vários Ebooks gratuitos e em inglês (WowEbook)