SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
Java Persistence API
Willian Massami Watanabe
1
Agradecimentos ao professor Adriano Rivolli e Gilliard Cordeiro
JDBC
3
4
SQL inserido diretamente
SQL inserido diretamente
SQL inserido diretamente
5
Navegação dentro do modelo
entidade relacionamento do banco
de dados
6
7
JPA
JPA
• Aplicações corporativas manipulam dados em grande
quantidade
• Esses dados são em sua maioria armazenados em banco de
dados relacionais
• As aplicações corporativas costumam ser desenvolvidas com
linguagens orientadas a objetos
• O modelo relacional e o modelo orientado a objetos diferem no
modo de estruturar os dados
• Transformações devem ocorrer toda vez que uma informação
trafegar da aplicação para o banco de dados ou vice-versa
JPA
• O JPA é o padrão de mapeamento objeto/entidade
relacionamento e interface de gerência de persistência do
JEE.
• Implementações do padrão JPA
• Hibernate
• EclipseLink
• OpenJPA
• …
JPA
JPA
13
14
15
16
17
• @Entity: entidade a ser
gerenciada no banco
(Tabela)
• @Id: campo ID de uma
tabela
• @GeneratedValue: indica
que o campo é gerado
automaticamente
• @Version: campo utilizando
internamente pelo JPA
18
19
20
Gera automaticamente
21
22
23
24
25
26
27
28
29
30
31
32
33
// cria o porsche no estado new
Marca porsche = new Marca("Porsche");
// passa o porsche para estado gerenciado
em.persist(porsche);
// cria a ferrari no estado novo
Marca ferrari = new Marca(1, "Ferrari");
//devolve a instância gerenciada
Marca outraFerrari = em.merge(ferrari);
// vai imprimir false
System.out.println(ferrari == outraFerrari);
JPA Annotations
JPA Annotations
35
Atributos ignorados
•  Utilizados*para*atributos*calculados,*ou*seja,*que*
não*serão*persistidos*
•  Isso*é*feito*com*atributos*transientes:*
@Transient
private double precoItem;
Ou*
private transient double precoItem;
JPA Annotations
36
Alterando o nome dos campos
@Entity
@Table(name="T_AUTOMOVEIS")
public class Automovel {
@Id @GeneratedValue
@Column(name="COD")
private Integer id;
@Column(name="DESC", nullable=false, length=100)
private String descricao;
@Temporal(TemporalType.TIMESTAMP)
@Column(name="DT_CADASTRO", nullable=false,
updatable=false)
private Date dataCadastro;
...
}
JPA Annotations
37
•  Atributos)do)tipo)Date)ou)Calendar*
•  @Temporal:)
– DATE:)somente)a)data,)sem)informação)de)hora;)
– TIME:)somente)informação)de)hora,)sem)data;)
– TIMESTAMP:)valor)padrão,)que)considera)tanto)data)
quanto)hora)
JPA Annotations
38
•  Anotação:)@ManyToOne)
@Entity
public class Modelo {
@Id @GeneratedValue
private Long id;
@ManyToOne
private Marca marca;
}
JPA Annotations
39
•  Anotação:)@OneToMany)
@Entity
public class Marca{
@Id @GeneratedValue
private Long id;
@OneToMany
private List<Modelo> modelos;
}
JPA Annotations
40
public class Marca {
@Id @GeneratedValue
private Integer id;
...
@OneToMany(mappedBy="montadora")
private List<Modelo> modelos;
...
}
public class Modelo {
@Id @GeneratedValue
private Integer id;
...
@ManyToOne
private Marca montadora;
...
}
Permite'acessar'os'objetos'de'associação'através'das'duas'
pontas'do'relacionamento'
JPA Annotations
41
•  Lazy%Loading!(padrão)!
–  Carrega!o(s)!objeto(s)!do!relacionamento!apenas!quando!
necessário!
•  Eager%Loading%
–  Força!o!carregamento!do(s)!objeto(s)!do!relacionamento!
sempre!
@Entity
public class Marca {
@Id @GeneratedValue
private Integer id;
@OneToMany(fetch=FetchType.EAGER)
private List<Modelo> modelos;
}
JPA Annotations
42
•  Permite'associar'uma'entidade'com'uma'lista'de'algum'
tipo'básico,'como'a'String'
@Entity
public class Automovel {
@Id @GeneratedValue
private Integer id;
@ElementCollection @Column(length=20)
private List<String> tags;
...
}
JPA Annotations
43
•  Anotação:)@ManyToMany)
@Entity
public class Automovel {
...
@ManyToMany
private List<Opcional> opcionais;
...
}
@Entity
public class Opcional {
...
@ManyToMany(mappedBy="opcionais")
private List<Automovel> automoveis;
...
}
JPQL
JPQL
45
•  Java$Persistence$Query$Language$
– JPQL%é%uma%linguagem%de%consulta,%assim%como%a%
SQL,%porém%orientada%a%objetos%
•  SQL:%
– select * from T_Automoveis where
ano_modelo >= 2010
•  JPQL:%
– select a from Automovel a where
a.anoModelo >= 2010
JPQL
46
•  Suporte(aos(operadores(básicos(do(SQL:(
–  =,(>,(>=,(<,(<=,(<>,(NOT,(BETWEEN,(LIKE,(IN,(IS(NULL,(IS(
EMPTY,(MEMBER([OF],(EXISTS(
•  Funções:(
–  CONCAT(String,(String...)(
–  SUBSTRING(String,(int(start([,(int(length])(
–  TRIM([[LEADING|TRAILING|BOTH]([char](FROM](String)(
–  LOWER(String);(UPPER(String);(LENGTH(String)(
–  LOCATE(String(original,(String(substring([,(int(start])(
–  ABS(int),(SQRT(int);(MOD(int,(int)(
–  CURRENT_DATE,(CURRENT_TIME,(
CURRENT_TIMESTAMP(
JPQL
47
•  SQL:%
– select * from Automovel auto left
outer join Modelo modelo on
auto.modelo_id = modelo.id left outer
join Marca marca on modelo.marca_id =
marca.id where marca.nome = 'Ferrari'
•  JPQL:%
– select a from Automovel a where
a.modelo.marca.nome = 'Ferrari’
JPQL
48
String jpql = "select a from Automovel a where
a.modelo.marca = :marca";
Marca marca = ...
Query query = entityManager.createQuery(jpql);
query.setParameter("marca", marca);
List<Automovel> automoveis = query.getResultList();
JPQL
49
•  Funções(de(agregações:(
–  AVG(property)(
–  MAX(property)(
–  MIN(property)(
–  SUM(property)(
–  COUNT(property)(
•  Exemplo:(
String jpql = "select AVG(a.anoModelo)
from Automovel a";
Query query =
entityManager.createQuery(jpql);
Double media = query.getSingleResult();
JPQL
50
•  Recurso(chamado(de(NamedQuery*
•  Exemplo:(
@NamedQuery(name="Automovel.listarTodos",
query="select a from Automovel a")
@Entity
public class Automovel {
// atributos e métodos
}
•  Como(usar:(
Query query =
em.createNamedQuery("Automovel.listarTodos");
List<Automovel> automoveis =
query.getResultList();
JPQL
51
•  Classe&
@NamedQuery(name="Usuario.findByUsuario",
query="SELECT u FROM Usuario u WHERE u.usuario
= :usuario AND u.senha = :senha AND u.ativo = true")
@Entity
public class Usuario {
...
}
•  Chamada&
login = (Usuario)
em.createNamedQuery("Usuario.findByUsuario")
.setParameter("usuario", usuario)
.setParameter("senha", senha)
.getSingleResult();

Weitere ähnliche Inhalte

Ähnlich wie JPA

Just java 2013 - Java EE + Jruby on Rails
Just java 2013  - Java EE + Jruby on RailsJust java 2013  - Java EE + Jruby on Rails
Just java 2013 - Java EE + Jruby on RailsRodrigo Urubatan
 
Tutorial de Web Semântica - CompSem 2015
Tutorial de Web Semântica - CompSem 2015Tutorial de Web Semântica - CompSem 2015
Tutorial de Web Semântica - CompSem 2015Bianca Pereira
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaMariana de Azevedo Santos
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Portando sua aplicação web para iphone
Portando sua aplicação web para iphonePortando sua aplicação web para iphone
Portando sua aplicação web para iphoneRenato Nitta
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3Joel Lobo
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraCDS
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Pablo Nóbrega
 
Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...
Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...
Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...JonathanSchneider
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Pythonantonio sérgio nogueira
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesCI&T
 

Ähnlich wie JPA (20)

Just java 2013 - Java EE + Jruby on Rails
Just java 2013  - Java EE + Jruby on RailsJust java 2013  - Java EE + Jruby on Rails
Just java 2013 - Java EE + Jruby on Rails
 
Tutorial de Web Semântica - CompSem 2015
Tutorial de Web Semântica - CompSem 2015Tutorial de Web Semântica - CompSem 2015
Tutorial de Web Semântica - CompSem 2015
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Spring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em JavaSpring: Overview do framework mais popular para desenvolvimento em Java
Spring: Overview do framework mais popular para desenvolvimento em Java
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Portando sua aplicação web para iphone
Portando sua aplicação web para iphonePortando sua aplicação web para iphone
Portando sua aplicação web para iphone
 
Curso De Hibernate 3
Curso De Hibernate 3Curso De Hibernate 3
Curso De Hibernate 3
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Voce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infraVoce se preocupa com performance ou é sempre problema da infra
Voce se preocupa com performance ou é sempre problema da infra
 
Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2Bibliotecas de interface rica no jsf 2
Bibliotecas de interface rica no jsf 2
 
Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...
Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...
Apresentação: CRIAÇÃO E CONSUMO DE DADOS NOS PADRÕES DA WEB SEMÂNTICA, UTILIZ...
 
Servidor de Aplicação Web: CherryPy - Python
Servidor de Aplicação  Web: CherryPy - PythonServidor de Aplicação  Web: CherryPy - Python
Servidor de Aplicação Web: CherryPy - Python
 
Apache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentesApache Wicket - Desenvolvimento WEB orientado a componentes
Apache Wicket - Desenvolvimento WEB orientado a componentes
 
Siga a doutrina certa
Siga a doutrina certaSiga a doutrina certa
Siga a doutrina certa
 
ORM e EF
ORM e EFORM e EF
ORM e EF
 
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
Entity framework
Entity frameworkEntity framework
Entity framework
 

Mehr von Willian Watanabe

Introdução ao JavaServer Faces
Introdução ao JavaServer FacesIntrodução ao JavaServer Faces
Introdução ao JavaServer FacesWillian Watanabe
 
Cookies e Sessions no HTTP
Cookies e Sessions no HTTPCookies e Sessions no HTTP
Cookies e Sessions no HTTPWillian Watanabe
 
Comunicação Cliente/Servidor - HTTP
Comunicação Cliente/Servidor - HTTPComunicação Cliente/Servidor - HTTP
Comunicação Cliente/Servidor - HTTPWillian Watanabe
 
CSS - Pseudo-classes, Seletores e Media-queries
CSS - Pseudo-classes, Seletores e Media-queriesCSS - Pseudo-classes, Seletores e Media-queries
CSS - Pseudo-classes, Seletores e Media-queriesWillian Watanabe
 

Mehr von Willian Watanabe (10)

Introdução ao JavaServer Faces
Introdução ao JavaServer FacesIntrodução ao JavaServer Faces
Introdução ao JavaServer Faces
 
MVC na plataforma JEE
MVC na plataforma JEEMVC na plataforma JEE
MVC na plataforma JEE
 
Cookies e Sessions no HTTP
Cookies e Sessions no HTTPCookies e Sessions no HTTP
Cookies e Sessions no HTTP
 
Comunicação Cliente/Servidor - HTTP
Comunicação Cliente/Servidor - HTTPComunicação Cliente/Servidor - HTTP
Comunicação Cliente/Servidor - HTTP
 
CSS - Pseudo-classes, Seletores e Media-queries
CSS - Pseudo-classes, Seletores e Media-queriesCSS - Pseudo-classes, Seletores e Media-queries
CSS - Pseudo-classes, Seletores e Media-queries
 
CSS - Posicionamento
CSS - PosicionamentoCSS - Posicionamento
CSS - Posicionamento
 
CSS - Modelo de Caixa
CSS - Modelo de CaixaCSS - Modelo de Caixa
CSS - Modelo de Caixa
 
Introdução ao CSS
Introdução ao CSSIntrodução ao CSS
Introdução ao CSS
 
Introdução ao HTML
Introdução ao HTMLIntrodução ao HTML
Introdução ao HTML
 
HTML/HTTP e a Web
HTML/HTTP e a WebHTML/HTTP e a Web
HTML/HTTP e a Web
 

Kürzlich hochgeladen

Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...
Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...
Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...xokece8239
 
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docxFASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docxmigorof964
 
Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...
Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...
Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...hefifo4687
 
Quando se trata de inteligência emocional, encontramos inúmeras definições na...
Quando se trata de inteligência emocional, encontramos inúmeras definições na...Quando se trata de inteligência emocional, encontramos inúmeras definições na...
Quando se trata de inteligência emocional, encontramos inúmeras definições na...migorof964
 
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docxFASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docxhefifo4687
 
O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...
O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...
O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...migorof964
 
Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...
Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...
Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...migorof964
 
Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...
Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...
Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...migorof964
 
Gerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdf
Gerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdfGerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdf
Gerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdfLeonardo Martins
 

Kürzlich hochgeladen (9)

Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...
Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...
Com base na imagem apresentada e em seus conhecimentos sobre a implementação ...
 
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docxFASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
 
Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...
Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...
Para Aguera (2008), a emoção pode ser representada por impulsos que podem ser...
 
Quando se trata de inteligência emocional, encontramos inúmeras definições na...
Quando se trata de inteligência emocional, encontramos inúmeras definições na...Quando se trata de inteligência emocional, encontramos inúmeras definições na...
Quando se trata de inteligência emocional, encontramos inúmeras definições na...
 
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docxFASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
FASE A1 de 2024 - Logica de Programacao e Algoritmos.docx
 
O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...
O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...
O horário político obrigatório suscitou inúmeros questionamentos em D. Matild...
 
Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...
Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...
Você já agiu sem pensar Muitas vezes, somos precipitados, porque o comportame...
 
Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...
Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...
Na unidade I, Valenciano (2024) cita três lições para a melhor compreensão da...
 
Gerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdf
Gerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdfGerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdf
Gerenciando_pequenos_projetos_com_Notion_Leonardo_Martins_AgileTrends2024.pdf
 

JPA