SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Programação Orientada a Objetos


       Estudo de Frameworks
(Mapeamento Objeto-Relacional em Java)

  Objetivo: Identificar os processos de
   mapeamento Objeto-Relacional
       Prof. Nécio de Lima Veras
Parte IV
Mapeamento de Herança
Estratégias

•   SINGLE_TABLE
    – É a opção default. Há uma única tabela para toda a herarquia de classes.
    – Há uma coluna na tabela para determinar a classe (DiscriminatorColumn);
•   JOINED
    – Define que há uma tabela para cada classe da hierarquia de classes.
    – Atributos de uma superclasse são persistidos na tabela da superclasse;
    – Assim, para obter um objeto de uma subclasse, é necessário fazer um join
      envolvendo todas as tabelas das superclasses. Isso pode ser bastante
      oneroso para o banco de dados e comprometer a performance da
      aplicação, especialmente quando a hierarquia é complexa e composta
      de muitas classes;
    – Há uma coluna na tabela da classe base para determinar a classe
      (DiscriminatorColumn);
•   TABLE_PER_CLASS
    – Semelhante à estratégia JOINED, mas cada tabela possui os campos dos
      atributos herdados e os campos dos seus próprios atributos (não herdados);
Visualizando Single Table




                                                      Para o Funcionários e
                                                      Professores:
@Entity
@Table(name="TBServidores")                           @Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)   @DiscriminatorValue
@DiscriminatorColumn (name="Tipo")                    (value="Funcionario")
public class Servidores {                             public class
  @Id protected BigInteger rg;                        Funcionario extends
  protected String nome;                              Servidor{
  ...                                                 …
                                                      }
}
Visualizando Joined
Observações

• É possível determinar uma superclasse da qual
  uma entidade herda atributos persistentes
  através da anotação @MappedSuperclass;
• Recurso interessante quando várias classes
  compartilham atributos persistentes;
• Pode-se usar as anotações
  @AttributeOverride ou
  @AssociationOverride na subclasse para
  sobrescrever a configuração da superclasse;
Visualizando
Table_Per_Class
Prática

• Crie as classes abaixo
  e faça o seu
  mapeamento usando o
  framework Hibernate;
   – Use as três
     estratégias descritas;
   – Observe as
     diferenças; e
   – Documente as suas
     observações;
Parte V - Callbacks
Callbacks

• JPA permite métodos de callback para
  acessar o EntityManager.
• Eventos disponíveis:
  – PostLoad
  – PrePersist
  – PostPersist
  – PreRemove
  – PostRemove
  – PreUpdate
  – PostUpdate
Exemplos
@PrePersist
void validateCreate() {
  if (idade > 130) {
    throw new IllegalStateException();
  }
}



                        @Entity
                        @EntityListeners(br.cefetpi.Monitor.class)

  Método                public class Pessoa {
                         ...

Callback em             }


  classe                public class Monitor {
                          @PostPersist
 Listener                 public void alertaNovaPessoa(Pessoa p) {
                            emailRH(p);
                          }
                        }
Sugestão de Prática

• Dadas as classes do exercício anterior, faça os seguintes
  callbacks:
   – Informe quando uma pessoa for carregada;
   – Antes de gravar uma pessoa (física e jurídica), verifique
     se os documentos estão preenchidos;
   – Após uma pessoa ter sido gravada, exiba o documento
     correspondente;
   – Antes de remover uma pessoa, pergunte se essa é
     realmente a intenção. Caso não seja, gere uma exceção;
   – Após a remoção de uma pessoa, informe o documento
     no qual foi removido;
   – Após de realizar uma alteração em uma pessoa, para
     efeito comparativo, mostre os documento antigo e novo;
Entendendo caches
Cache

•   O Hibernate trabalha com dois tipos de cache:
     – first-level-cache – cache simples de sessão que é utilizado
       sempre, exclusivamente para diminuir os acessos ao banco de
       dados. Ao invés de realizar atualizações a cada comando dentro
       de uma transação, as atualizações são feitas somente ao final da
       transação.
         • Exemplo: Se um objeto é modificado várias vezes dentro de
            uma transação, o Hibernate gera somente um único comando
            SQL UPDATE ao final da transação, contendo todas as
            modificações.
     – second-level-cache – Mantém os objetos em memória e os
       utiliza mesmo entre diferentes sessões de uma mesma session
       factory.
         • Não é usado por default, devendo ser explicitamente
            configurado para que possa ser usado.
         • Deve-se configurar que entidades vão usá-lo, ou seja, quais
            vão ficar no cache.
Visualizando
 • Existem diferentes estratégias para o Cache.
    – Indicamos que tipo de leitura e/ou escrita será feita e o
      cache saberá quando invalidar uma entrada;
    – As estratégias são essas:
        • NONE
        • NONSTRICT_READ_WRITE
        • READ_ONLY
        • READ_WRITE
        • TRANSACTIONAL

@Entity
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Cliente {
   ...
}
Entendendo as Estratégias

• READ_ONLY
   – Útil para dados que são lidos, mas não, atualizados.
   – Simples e com excelente perfomance. A melhor em relação
     às demais.
• READ_WRITE
   – Usado quando os dados são mais lidos que alterados.
   – Tem mais overhead que caches read-only.
• NONSTRICT_READ_WRITE
   – Não garante que duas transações não modificarão
     simultaneamente o mesmo dado.
   – Usado quando as alterações são poucas;
• TRANSACTIONAL
   – Cache inteiramente transacional, que exige um ambiente
     com suporte à JTA.

Weitere ähnliche Inhalte

Was ist angesagt?

Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Natanael Fonseca
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaCharles Jungbeck
 
Jpa – Java Persistence Api
Jpa – Java Persistence ApiJpa – Java Persistence Api
Jpa – Java Persistence Apiguestf54162
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simplesLukinha92
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao SwingArthur Emanuel
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IVGabriel Faustino
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernateAgenor Neto
 

Was ist angesagt? (19)

Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Conceitos Básicos de OO e Java
Conceitos Básicos de OO e JavaConceitos Básicos de OO e Java
Conceitos Básicos de OO e Java
 
Jpa – Java Persistence Api
Jpa – Java Persistence ApiJpa – Java Persistence Api
Jpa – Java Persistence Api
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
Java 14
Java 14Java 14
Java 14
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Aula05
Aula05Aula05
Aula05
 
Programação orientada a objetos - IV
Programação orientada a objetos - IVProgramação orientada a objetos - IV
Programação orientada a objetos - IV
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Java: Introdução
Java: IntroduçãoJava: Introdução
Java: Introdução
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 

Ähnlich wie POO Mapeamento Objeto-Relacional Estratégias Herança

Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Elvis Rocha
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetosMateus Parente
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Ryan Padilha
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotaçõesdieguinhomcz
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotaçõesdieguinhomcz
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012 Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012 Bruno Caimar
 

Ähnlich wie POO Mapeamento Objeto-Relacional Estratégias Herança (20)

Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
Java EE 6 JPA 2.0, EJB 3.1 e CDI 1.0
 
Refatorações
RefatoraçõesRefatorações
Refatorações
 
Aula JPA
Aula JPAAula JPA
Aula JPA
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
Slide Share s2 Rodd
Slide Share s2 RoddSlide Share s2 Rodd
Slide Share s2 Rodd
 
Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2Slide Semana2 Rodrigo2
Slide Semana2 Rodrigo2
 
Slide Semana2 Rodrigo
Slide Semana2 RodrigoSlide Semana2 Rodrigo
Slide Semana2 Rodrigo
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Primeiros Passos Com Elasticsearch
Primeiros Passos Com ElasticsearchPrimeiros Passos Com Elasticsearch
Primeiros Passos Com Elasticsearch
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
Mini curso hibernate com anotações
Mini curso hibernate com anotaçõesMini curso hibernate com anotações
Mini curso hibernate com anotações
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012 Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
Resumo da Sessão "Effective Geodatabase Programming" do Esri DevSummit 2012
 

Mehr von Nécio de Lima Veras

Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosNécio de Lima Veras
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Nécio de Lima Veras
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoNécio de Lima Veras
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesNécio de Lima Veras
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsNécio de Lima Veras
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesNécio de Lima Veras
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionaisNécio de Lima Veras
 
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Nécio de Lima Veras
 
Conceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidadeConceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidadeNécio de Lima Veras
 

Mehr von Nécio de Lima Veras (20)

Introdução ao JavaFX
Introdução ao JavaFXIntrodução ao JavaFX
Introdução ao JavaFX
 
Introdução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmosIntrodução à analise e complexidade de algoritmos
Introdução à analise e complexidade de algoritmos
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Versionamento com git
Versionamento com gitVersionamento com git
Versionamento com git
 
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
Uma Abordagem Baseada em Agentes para Planejamento e Monitoramento de Serviço...
 
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMoIntrodução à Engenharia de Software Orientada a Agentes com JaCaMo
Introdução à Engenharia de Software Orientada a Agentes com JaCaMo
 
Agentes inteligentes com jason
Agentes inteligentes com jasonAgentes inteligentes com jason
Agentes inteligentes com jason
 
Ambientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentesAmbientes em Sistemas Multi-agentes
Ambientes em Sistemas Multi-agentes
 
Arquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agentsArquiteturas concretas de agentes inteligentes - bdi agents
Arquiteturas concretas de agentes inteligentes - bdi agents
 
Revisão de matemática
Revisão de matemáticaRevisão de matemática
Revisão de matemática
 
Especificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentesEspecificações iniciais de agentes inteligentes
Especificações iniciais de agentes inteligentes
 
Notas sobre agentes inteligentes
Notas sobre agentes inteligentesNotas sobre agentes inteligentes
Notas sobre agentes inteligentes
 
Java swing
Java swingJava swing
Java swing
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Introdução aos Sistemas operacionais
Introdução aos Sistemas operacionaisIntrodução aos Sistemas operacionais
Introdução aos Sistemas operacionais
 
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
Organizando um Repositório de Objetos de Aprendizagem para dispositivos móvei...
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
Desenvolvimento ágil de software
Desenvolvimento ágil de softwareDesenvolvimento ágil de software
Desenvolvimento ágil de software
 
Internet: conceitos e segurança
Internet: conceitos e segurançaInternet: conceitos e segurança
Internet: conceitos e segurança
 
Conceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidadeConceitos básicos de usabilidade e acessibilidade
Conceitos básicos de usabilidade e acessibilidade
 

POO Mapeamento Objeto-Relacional Estratégias Herança

  • 1. Programação Orientada a Objetos Estudo de Frameworks (Mapeamento Objeto-Relacional em Java) Objetivo: Identificar os processos de mapeamento Objeto-Relacional Prof. Nécio de Lima Veras
  • 3. Estratégias • SINGLE_TABLE – É a opção default. Há uma única tabela para toda a herarquia de classes. – Há uma coluna na tabela para determinar a classe (DiscriminatorColumn); • JOINED – Define que há uma tabela para cada classe da hierarquia de classes. – Atributos de uma superclasse são persistidos na tabela da superclasse; – Assim, para obter um objeto de uma subclasse, é necessário fazer um join envolvendo todas as tabelas das superclasses. Isso pode ser bastante oneroso para o banco de dados e comprometer a performance da aplicação, especialmente quando a hierarquia é complexa e composta de muitas classes; – Há uma coluna na tabela da classe base para determinar a classe (DiscriminatorColumn); • TABLE_PER_CLASS – Semelhante à estratégia JOINED, mas cada tabela possui os campos dos atributos herdados e os campos dos seus próprios atributos (não herdados);
  • 4. Visualizando Single Table Para o Funcionários e Professores: @Entity @Table(name="TBServidores") @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorValue @DiscriminatorColumn (name="Tipo") (value="Funcionario") public class Servidores { public class @Id protected BigInteger rg; Funcionario extends protected String nome; Servidor{ ... … } }
  • 6. Observações • É possível determinar uma superclasse da qual uma entidade herda atributos persistentes através da anotação @MappedSuperclass; • Recurso interessante quando várias classes compartilham atributos persistentes; • Pode-se usar as anotações @AttributeOverride ou @AssociationOverride na subclasse para sobrescrever a configuração da superclasse;
  • 8. Prática • Crie as classes abaixo e faça o seu mapeamento usando o framework Hibernate; – Use as três estratégias descritas; – Observe as diferenças; e – Documente as suas observações;
  • 9. Parte V - Callbacks
  • 10. Callbacks • JPA permite métodos de callback para acessar o EntityManager. • Eventos disponíveis: – PostLoad – PrePersist – PostPersist – PreRemove – PostRemove – PreUpdate – PostUpdate
  • 11. Exemplos @PrePersist void validateCreate() { if (idade > 130) { throw new IllegalStateException(); } } @Entity @EntityListeners(br.cefetpi.Monitor.class) Método public class Pessoa { ... Callback em } classe public class Monitor { @PostPersist Listener public void alertaNovaPessoa(Pessoa p) { emailRH(p); } }
  • 12. Sugestão de Prática • Dadas as classes do exercício anterior, faça os seguintes callbacks: – Informe quando uma pessoa for carregada; – Antes de gravar uma pessoa (física e jurídica), verifique se os documentos estão preenchidos; – Após uma pessoa ter sido gravada, exiba o documento correspondente; – Antes de remover uma pessoa, pergunte se essa é realmente a intenção. Caso não seja, gere uma exceção; – Após a remoção de uma pessoa, informe o documento no qual foi removido; – Após de realizar uma alteração em uma pessoa, para efeito comparativo, mostre os documento antigo e novo;
  • 14. Cache • O Hibernate trabalha com dois tipos de cache: – first-level-cache – cache simples de sessão que é utilizado sempre, exclusivamente para diminuir os acessos ao banco de dados. Ao invés de realizar atualizações a cada comando dentro de uma transação, as atualizações são feitas somente ao final da transação. • Exemplo: Se um objeto é modificado várias vezes dentro de uma transação, o Hibernate gera somente um único comando SQL UPDATE ao final da transação, contendo todas as modificações. – second-level-cache – Mantém os objetos em memória e os utiliza mesmo entre diferentes sessões de uma mesma session factory. • Não é usado por default, devendo ser explicitamente configurado para que possa ser usado. • Deve-se configurar que entidades vão usá-lo, ou seja, quais vão ficar no cache.
  • 15. Visualizando • Existem diferentes estratégias para o Cache. – Indicamos que tipo de leitura e/ou escrita será feita e o cache saberá quando invalidar uma entrada; – As estratégias são essas: • NONE • NONSTRICT_READ_WRITE • READ_ONLY • READ_WRITE • TRANSACTIONAL @Entity @Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) public class Cliente { ... }
  • 16. Entendendo as Estratégias • READ_ONLY – Útil para dados que são lidos, mas não, atualizados. – Simples e com excelente perfomance. A melhor em relação às demais. • READ_WRITE – Usado quando os dados são mais lidos que alterados. – Tem mais overhead que caches read-only. • NONSTRICT_READ_WRITE – Não garante que duas transações não modificarão simultaneamente o mesmo dado. – Usado quando as alterações são poucas; • TRANSACTIONAL – Cache inteiramente transacional, que exige um ambiente com suporte à JTA.