Trilha – Java EE University
            Frederico Maia Arantes
Desenvolvedor de Software / Instrutor / Empreendedor




                                               Globalcode – Open4education
Introdução à JPA 2 e Hibernate

     Produtividade persistindo dados em Java




                                               Globalcode – Open4education
Sobre mim
 Frederico Maia Arantes




                          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?



                             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


                                      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



                                     Globalcode – Open4education
Persistência de dados




                        Globalcode – Open4education
Persistência de dados




                        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?



                                     Globalcode – Open4education
Surge o Super Hibernate!




                           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

                                       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!




                                     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!

                                    Globalcode – Open4education
Inserindo dados sem JPA




                          Globalcode – Open4education
Inserindo dados com JPA




                          Globalcode – Open4education
Buscando dados sem JPA




                         Globalcode – Open4education
Buscando dados com JPA




                         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



                                    Globalcode – Open4education
Classe Java comum




                    Globalcode – Open4education
Classe Java com JPA




                      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);




                                        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();




                                             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

                                        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;
}


                                      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;
}


                                            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;
}



                                       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;
}



                                      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.




                                    Globalcode – Open4education
Relacionamentos
@Entity
public class Carro {
       @OneToOne
       private Motor motor;
}
@Entity
public class Motor {
       @OneToOne(mappedBy = “motor”)
       private Carro carro;
}

                                       Globalcode – Open4education
Estratégias de herança
 Um conceito um pouco complexo, a princípio, de se
                         ̧              ̧
 mapear é o de Heranca. A especificacão JPA define
    ̂
 tres estratégia para realizar o mapeamento de
        ̧
 heranca.

 Single Table
 Joined
 Table per Class



                                      Globalcode – Open4education
Single Table
 A mais comum e a que possibilita melhor
                    ̧
 desempenho em relacão a velocidade das
 consultas.

 Será criada apenas uma tabela com o nome da
 super classe para armazenar os dados dos objetos.




                                     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 às sub classes
 possuem chaves estrangeiras vinculadas à tabela
 correspondente à super classe.




                                       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 operacões de join.

 A desvantagem é que não existe um vínculo
 explícito no banco de dados entres as tabelas.

                                        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)




                                    Globalcode – Open4education
Dúvidas?




Contatos
  fredericomaia10@gmail.com
  fredmaia
  fredericomaia10


                              Globalcode – Open4education

Introdução a JPA e Hibernate - TDC 2012

  • 1.
    Trilha – JavaEE University Frederico Maia Arantes Desenvolvedor de Software / Instrutor / Empreendedor Globalcode – Open4education
  • 2.
    Introdução à JPA2 e Hibernate Produtividade persistindo dados em Java Globalcode – Open4education
  • 3.
    Sobre mim FredericoMaia Arantes Globalcode – Open4education
  • 4.
    Agenda Persistência dedados O que é JPA? O que é Hibernate? Mapeando minhas entidades Relacionamentos Estratégias de herança E agora, pra onde vou? Globalcode – Open4education
  • 5.
    Persistência de dados “Apersistê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 Globalcode – Open4education
  • 6.
    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 Globalcode – Open4education
  • 7.
    Persistência de dados Globalcode – Open4education
  • 8.
    Persistência de dados Globalcode – Open4education
  • 9.
    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? Globalcode – Open4education
  • 10.
    Surge o SuperHibernate! Globalcode – Open4education
  • 11.
    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 Globalcode – Open4education
  • 12.
    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! Globalcode – Open4education
  • 13.
    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! Globalcode – Open4education
  • 14.
    Inserindo dados semJPA Globalcode – Open4education
  • 15.
    Inserindo dados comJPA Globalcode – Open4education
  • 16.
    Buscando dados semJPA Globalcode – Open4education
  • 17.
    Buscando dados comJPA Globalcode – Open4education
  • 18.
    Mapeamento Mapear omodelo 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 Globalcode – Open4education
  • 19.
    Classe Java comum Globalcode – Open4education
  • 20.
    Classe Java comJPA Globalcode – Open4education
  • 21.
    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); Globalcode – Open4education
  • 22.
    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(); Globalcode – Open4education
  • 23.
    Relacionamentos Os relacionamentosentre 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 Globalcode – Open4education
  • 24.
    Relacionamentos Oneto 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; } Globalcode – Open4education
  • 25.
    Relacionamentos Oneto 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; } Globalcode – Open4education
  • 26.
    Relacionamentos Manyto One: por exemplo, um pedido pertence a apenas um cliente e um cliente faz muitos pedidos. @Entity public class Pedido { @ManyToOne private Cliente cliente; } Globalcode – Open4education
  • 27.
    Relacionamentos Manyto Many: por exemplo, um livro possui muitos autores e um autor possui muitos livros. @Entity public class Livro { @ManyToMany private List<Autor> autores; } Globalcode – Open4education
  • 28.
    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. Globalcode – Open4education
  • 29.
    Relacionamentos @Entity public class Carro{ @OneToOne private Motor motor; } @Entity public class Motor { @OneToOne(mappedBy = “motor”) private Carro carro; } Globalcode – Open4education
  • 30.
    Estratégias de herança Um conceito um pouco complexo, a princípio, de se ̧ ̧ mapear é o de Heranca. A especificacão JPA define ̂ tres estratégia para realizar o mapeamento de ̧ heranca. Single Table Joined Table per Class Globalcode – Open4education
  • 31.
    Single Table Amais comum e a que possibilita melhor ̧ desempenho em relacão a velocidade das consultas. Será criada apenas uma tabela com o nome da super classe para armazenar os dados dos objetos. Globalcode – Open4education
  • 32.
    Joined Uma tabelapara cada classe da hierarquia é criada. Em cada tabela, apenas os campos referentes aos atributos da classe correspondente são criados. As tabelas correspondentes às sub classes possuem chaves estrangeiras vinculadas à tabela correspondente à super classe. Globalcode – Open4education
  • 33.
    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 operacões de join. A desvantagem é que não existe um vínculo explícito no banco de dados entres as tabelas. Globalcode – Open4education
  • 34.
    E agora praonde 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) Globalcode – Open4education
  • 35.
    Dúvidas? Contatos fredericomaia10@gmail.com fredmaia fredericomaia10 Globalcode – Open4education