SlideShare uma empresa Scribd logo
1 de 22
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 III
Mapeamento de Relacionamentos
Atributos compostos

• Se a entidade possuir um atributos que,
  em sua abstração, deve ser dividido em
  outros campos, então usa-se a anotação
  @Embeddable
• Ou seja, este campo, na verdade foi
  promovido à classe;
Visualizando Relações

• Se a entidade possuir uma propriedade
  composta cujo tipo é uma outra entidade:
   – use a anotação @OneToOne em uma propriedade do
    tipo correspondente;
  – Em associações one-to-one bidirecionais, usamos o
    atributo mappedBy para explicitar o lado não
    proprietário da associação.
Entendendo
Empresa




    Diretor
Mais Exemplos
@Entity
public class Cliente {
    ...
    @OneToOne
    @JoinColumn(name="iConjugeId", unique=true,
                nullable=false, updatable=false)
    public Conjuge conjuge;
    ...
}



         @Entity
         public class Conjuge {
             ...
             @OneToOne(mappedBy="conjuge")
             public Cliente cliente;
             ...
         }
Prática
Relacionamento
                         de muitos para um
●   Se a entidade faz parte de uma coleção de
    entidades de outras entidades:
    ●   Use a anotação @ManyToOne para uma
        propriedade que representará a entidade dona
        da coleção;
Outro Exemplo



@Entity
public class Pedido {
    ...
    @ManyToOne
    @JoinColumn(name="ClienteID", nullable=false)
    private Cliente cliente;
    ...
}
De um para muitos

• Se a entidade possui uma coleção de outras
  entidades:
  – Use a anotação @OneToMany para uma propriedade
    que representará a coleção;
Mais um exemplo



@Entity
public class Cliente {
    ...
    @OneToMany(cascade=ALL, mappedBy="cliente")
    private Set<Pedido> pedidos;
    ...
}
Observações

• Em caso de associações bidirecionais, em uma
  classe temos um atributo OneToMany e na outra
  classe (a que detém a chave estrangeira) temos
  um atributo ManyToOne.
   – No lado OneToMany de uma associação
     bidirecional, usamos o atributo mappedBy para
     explicitar que o relacionamento (chave
     estrangeira) fica no lado oposto (inverso) da
     associação.
Prática
De muitos para muitos

• Se duas entidades possuem coleções umas das
  outras:
  – Então ambas entidades terão propriedades de coleção
    com a anotação @ManyToMany;
Visualizando
@ManyToMany
Outro exemplo
@Entity
public class Cliente {
    ...
  @ManyToMany
  @JoinTable(
    name="PhoneCli",
    joinColumns=
      @JoinColumn(name="iCli_ID", referencedColumnName="ID"),
    inverseJoinColumns=
      @JoinColumn(name="iFone_ID", referencedColumnName="ID")
  )
  private Set<Telefone> fones;
  ...
}


        @Entity
        public class Telefone {
            ...
            @ManyToMany(mappedBy="fones")
            private Set<Cliente> clientes;
            ...
        }
Considerações

• Novamente, o mappedBy fica do lado não
  proprietário da associação e é usado em
  associações bidirecionais.
• Prática:
ManyToMany com atributo

• E se caso a associação N:N possuir um
  (ou mais) atributo(s) intermediário(s) não-
  chave?

• Solução:
  1.Mapear a classe N:N;
  2.Criar uma classe está-
    tica interna com suas
    chaves.
  3.Criar as relações “ManyToOne” com as tabelas
    que fornecem as chaves.
Visualizando em termos de
          código

         @Embeddable
         private static class Id {

             @Column (name = "idAviao")
             private int idAviao;

             @Column (name = "idAeroporto")
             private int idAeroporto;

             public int getIdAviao() {
                    return idAviao;
             }

             public void setIdAviao(int idAviao) {
                    this.idAviao = idAviao;
             }

             public int getIdAeroporto() {
                    return idAeroporto;
             }

             public void setIdAeroporto(int
             idAeroporto) {
                    this.idAeroporto = idAeroporto;
             }
         }
Cascateamento
•   O cascateamento pode ser usado para propagar operações para
    classes associadas;
•   Tipos:
     – ALL – Todas as operações possíveis são cascateadas para as
       classes associadas.
     – MERGE – Se a entidade fonte estiver “merged”, o merge é
       cascateado para as classes associadas.
     – PERSIST – Se a entidade fonte for persistida, a persistência é
       cascateada para as classes associadas.
     – REFRESH – Se a entidade fonte for atualizada, a atualização é
       cascateada para as classes associadas.
     – REMOVE – Se a entidade fonte for removida, as classes
       associadas também serão removidas.
• Exemplo:
@OneToMany(cascade={CascadeType.REMOVE})
private List<Pessoa> dependentes;
Carregando as Associações

•   A associações podem ser carregadas de duas formas:
     – EAGER – A associação é carregada juntamente com a classe
       base.

          @OneToMany(fetch=FetchType.EAGER)

    – LAZY – A associação somente é carregada quando for usada.

        • @OneToMany(fetch=FetchType.LAZY)

•   Em associações ManyToOne e OneToOne, EAGER é padrão.
•   Em associações OneToMany e ManyToMany, LAZY é padrão.
     – As coleções só são inicializadas quando houver necessidade;
     – Apenas quando algum método que acesse o conteúdo da coleção
       for executado é que ela será preenchida;
Prática

• Atualize as classes anteriores conforme o
  diagrama abaixo:

Mais conteúdo relacionado

Mais procurados

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
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael 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
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simplesLukinha92
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernateAgenor Neto
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objetoGleyciana Garrido
 

Mais procurados (20)

Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
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
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Aula05
Aula05Aula05
Aula05
 
2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
v
vv
v
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Java 02
Java 02Java 02
Java 02
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Apostila hibernate
Apostila hibernateApostila hibernate
Apostila hibernate
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
Spring Data Jpa
Spring Data JpaSpring Data Jpa
Spring Data Jpa
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
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
 
Exercícios de programação orientado a objeto
Exercícios de programação orientado a objetoExercícios de programação orientado a objeto
Exercícios de programação orientado a objeto
 

Semelhante a Relacionamentos do mapeamento OR

Semelhante a Relacionamentos do mapeamento OR (20)

Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Orientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores AndroidOrientação a Objetos para Desenvolvedores Android
Orientação a Objetos para Desenvolvedores Android
 
Java7
Java7Java7
Java7
 
Aula7 diagrama classes
Aula7 diagrama classesAula7 diagrama classes
Aula7 diagrama classes
 
Persistência JPA
Persistência JPAPersistência JPA
Persistência JPA
 
Virada Tecnológica 2017
Virada Tecnológica 2017Virada Tecnológica 2017
Virada Tecnológica 2017
 
Solid
SolidSolid
Solid
 
Refactoring
RefactoringRefactoring
Refactoring
 
Aula classes abstratas 3º periodo uniao
Aula classes abstratas  3º periodo uniaoAula classes abstratas  3º periodo uniao
Aula classes abstratas 3º periodo uniao
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Resumão java
Resumão javaResumão java
Resumão java
 
[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First[NetPonto] Entity Framework 4 Code-First
[NetPonto] Entity Framework 4 Code-First
 
Entity Framework 4 Code-First
Entity Framework 4 Code-FirstEntity Framework 4 Code-First
Entity Framework 4 Code-First
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
Java 07
Java 07Java 07
Java 07
 
Aula5
Aula5Aula5
Aula5
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
 

Mais de 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
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados Né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
 

Mais de 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
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
 
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
 

Relacionamentos do mapeamento OR

  • 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
  • 2. Parte III Mapeamento de Relacionamentos
  • 3. Atributos compostos • Se a entidade possuir um atributos que, em sua abstração, deve ser dividido em outros campos, então usa-se a anotação @Embeddable • Ou seja, este campo, na verdade foi promovido à classe;
  • 4. Visualizando Relações • Se a entidade possuir uma propriedade composta cujo tipo é uma outra entidade: – use a anotação @OneToOne em uma propriedade do tipo correspondente; – Em associações one-to-one bidirecionais, usamos o atributo mappedBy para explicitar o lado não proprietário da associação.
  • 6. Mais Exemplos @Entity public class Cliente { ... @OneToOne @JoinColumn(name="iConjugeId", unique=true, nullable=false, updatable=false) public Conjuge conjuge; ... } @Entity public class Conjuge { ... @OneToOne(mappedBy="conjuge") public Cliente cliente; ... }
  • 8. Relacionamento de muitos para um ● Se a entidade faz parte de uma coleção de entidades de outras entidades: ● Use a anotação @ManyToOne para uma propriedade que representará a entidade dona da coleção;
  • 9. Outro Exemplo @Entity public class Pedido { ... @ManyToOne @JoinColumn(name="ClienteID", nullable=false) private Cliente cliente; ... }
  • 10. De um para muitos • Se a entidade possui uma coleção de outras entidades: – Use a anotação @OneToMany para uma propriedade que representará a coleção;
  • 11. Mais um exemplo @Entity public class Cliente { ... @OneToMany(cascade=ALL, mappedBy="cliente") private Set<Pedido> pedidos; ... }
  • 12. Observações • Em caso de associações bidirecionais, em uma classe temos um atributo OneToMany e na outra classe (a que detém a chave estrangeira) temos um atributo ManyToOne. – No lado OneToMany de uma associação bidirecional, usamos o atributo mappedBy para explicitar que o relacionamento (chave estrangeira) fica no lado oposto (inverso) da associação.
  • 14. De muitos para muitos • Se duas entidades possuem coleções umas das outras: – Então ambas entidades terão propriedades de coleção com a anotação @ManyToMany;
  • 16. Outro exemplo @Entity public class Cliente { ... @ManyToMany @JoinTable( name="PhoneCli", joinColumns= @JoinColumn(name="iCli_ID", referencedColumnName="ID"), inverseJoinColumns= @JoinColumn(name="iFone_ID", referencedColumnName="ID") ) private Set<Telefone> fones; ... } @Entity public class Telefone { ... @ManyToMany(mappedBy="fones") private Set<Cliente> clientes; ... }
  • 17. Considerações • Novamente, o mappedBy fica do lado não proprietário da associação e é usado em associações bidirecionais. • Prática:
  • 18. ManyToMany com atributo • E se caso a associação N:N possuir um (ou mais) atributo(s) intermediário(s) não- chave? • Solução: 1.Mapear a classe N:N; 2.Criar uma classe está- tica interna com suas chaves. 3.Criar as relações “ManyToOne” com as tabelas que fornecem as chaves.
  • 19. Visualizando em termos de código @Embeddable private static class Id { @Column (name = "idAviao") private int idAviao; @Column (name = "idAeroporto") private int idAeroporto; public int getIdAviao() { return idAviao; } public void setIdAviao(int idAviao) { this.idAviao = idAviao; } public int getIdAeroporto() { return idAeroporto; } public void setIdAeroporto(int idAeroporto) { this.idAeroporto = idAeroporto; } }
  • 20. Cascateamento • O cascateamento pode ser usado para propagar operações para classes associadas; • Tipos: – ALL – Todas as operações possíveis são cascateadas para as classes associadas. – MERGE – Se a entidade fonte estiver “merged”, o merge é cascateado para as classes associadas. – PERSIST – Se a entidade fonte for persistida, a persistência é cascateada para as classes associadas. – REFRESH – Se a entidade fonte for atualizada, a atualização é cascateada para as classes associadas. – REMOVE – Se a entidade fonte for removida, as classes associadas também serão removidas. • Exemplo: @OneToMany(cascade={CascadeType.REMOVE}) private List<Pessoa> dependentes;
  • 21. Carregando as Associações • A associações podem ser carregadas de duas formas: – EAGER – A associação é carregada juntamente com a classe base. @OneToMany(fetch=FetchType.EAGER) – LAZY – A associação somente é carregada quando for usada. • @OneToMany(fetch=FetchType.LAZY) • Em associações ManyToOne e OneToOne, EAGER é padrão. • Em associações OneToMany e ManyToMany, LAZY é padrão. – As coleções só são inicializadas quando houver necessidade; – Apenas quando algum método que acesse o conteúdo da coleção for executado é que ela será preenchida;
  • 22. Prática • Atualize as classes anteriores conforme o diagrama abaixo: