Programação Orientada a Objetos       Estudo de Frameworks(Mapeamento Objeto-Relacional em Java)  Objetivo: Identificar os...
Parte IIIMapeamento de Relacionamentos
Atributos compostos• Se a entidade possuir um atributos que,  em sua abstração, deve ser dividido em  outros campos, então...
Visualizando Relações• Se a entidade possuir uma propriedade  composta cujo tipo é uma outra entidade:   – use a anotação ...
EntendendoEmpresa    Diretor
Mais Exemplos@Entitypublic class Cliente {    ...    @OneToOne    @JoinColumn(name="iConjugeId", unique=true,             ...
Prática
Relacionamento                         de muitos para um●   Se a entidade faz parte de uma coleção de    entidades de outr...
Outro Exemplo@Entitypublic class Pedido {    ...    @ManyToOne    @JoinColumn(name="ClienteID", nullable=false)    private...
De um para muitos• Se a entidade possui uma coleção de outras  entidades:  – Use a anotação @OneToMany para uma propriedad...
Mais um exemplo@Entitypublic class Cliente {    ...    @OneToMany(cascade=ALL, mappedBy="cliente")    private Set<Pedido> ...
Observações• Em caso de associações bidirecionais, em uma  classe temos um atributo OneToMany e na outra  classe (a que de...
Prática
De muitos para muitos• Se duas entidades possuem coleções umas das  outras:  – Então ambas entidades terão propriedades de...
Visualizando@ManyToMany
Outro exemplo@Entitypublic class Cliente {    ...  @ManyToMany  @JoinTable(    name="PhoneCli",    joinColumns=      @Join...
Considerações• Novamente, o mappedBy fica do lado não  proprietário da associação e é usado em  associações bidirecionais....
ManyToMany com atributo• E se caso a associação N:N possuir um  (ou mais) atributo(s) intermediário(s) não-  chave?• Soluç...
Visualizando em termos de          código         @Embeddable         private static class Id {             @Column (name ...
Cascateamento•   O cascateamento pode ser usado para propagar operações para    classes associadas;•   Tipos:     – ALL – ...
Carregando as Associações•   A associações podem ser carregadas de duas formas:     – EAGER – A associação é carregada jun...
Prática• Atualize as classes anteriores conforme o  diagrama abaixo:
Upcoming SlideShare
Loading in …5
×

Relacionamentos do mapeamento OR

1,409 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,409
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Relacionamentos do mapeamento OR

  1. 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. 2. Parte IIIMapeamento de Relacionamentos
  3. 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. 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.
  5. 5. EntendendoEmpresa Diretor
  6. 6. Mais Exemplos@Entitypublic 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; ... }
  7. 7. Prática
  8. 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. 9. Outro Exemplo@Entitypublic class Pedido { ... @ManyToOne @JoinColumn(name="ClienteID", nullable=false) private Cliente cliente; ...}
  10. 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. 11. Mais um exemplo@Entitypublic class Cliente { ... @OneToMany(cascade=ALL, mappedBy="cliente") private Set<Pedido> pedidos; ...}
  12. 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.
  13. 13. Prática
  14. 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;
  15. 15. Visualizando@ManyToMany
  16. 16. Outro exemplo@Entitypublic 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. 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. 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. 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. 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. 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. 22. Prática• Atualize as classes anteriores conforme o diagrama abaixo:

×