SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Programação II - Prof. Fernando dos Santos




                                Java Persistence API (JPA)
                                 Mapeamento de Herança

                                                Fernando dos Santos
                                             fernando.santos@udesc.br
Programação II - Prof. Fernando dos Santos




   Herança e Banco de Dados
   • Considere a seguinte situação de herança.
                                                                Pessoa

                                                     -   id: int
                                                     -   nome: String

                                                     +   gets() e sets()




                                             PessoaFisica                  PessoaJuridica

                                         -    RG: String                   -   IE: String
                                         -    CPF: String                  -   CNPJ: String

                                         +    gets() e sets()              +   gets() e sets()


   • Quais tabelas você teria no banco de dados?
                                                                                                 2
Programação II - Prof. Fernando dos Santos




   Mapeamento de Herança
   • JPA disponibiliza 3 estratégias para mapeamento de herança:
          – Tabela por hierarquia de classes
          – Tabela por classe concreta
          – Tabela por classe e subclasse




                                                                   3
Programação II - Prof. Fernando dos Santos



   Tabela por hierarquia de classes
   Definição
   • Uma única tabela é criada para guardar todos os dados
          – é necessário uma coluna discriminadora, para identificar o tipo de
            dado armazenado pelo registro (pessoa física ou jurídica)
                                   Pessoa

                        -   id: int
                        -   nome: String

                        +   gets() e sets()




                PessoaFisica                  PessoaJuridica

            -    RG: String                   -   IE: String
            -    CPF: String                  -   CNPJ: String

            +    gets() e sets()              +   gets() e sets()




                                                                            4
Programação II - Prof. Fernando dos Santos



   Tabela por hierarquia de classes
   Mapeamento JPA
   • Mapeamento na superclasse
    @Entity
    @Table (name="pessoa_fisica_juridica")
    @Inheritance (strategy = InheritanceType.SINGLE_TABLE)
    @DiscriminatorColumn ( name="discriminador",
                               discriminatorType= DiscriminatorType.STRING)
    public abstract class Pessoa implements Serializable {
      @Id
      @GeneratedValue
      private int id;

        @Column(name="nome")
        private String nome;

        // métodos get/set
    }


                                                                              5
Programação II - Prof. Fernando dos Santos



   Tabela por hierarquia de classes
   Mapeamento JPA
   • Mapeamento nas subclasses
     @Entity
     @DiscriminatorValue ("F")
     public class PessoaFisica extends Pessoa{
       @Column(name="rg")
       private String RG;
       @Column(name="cpf")
       private String CPF;
                                    @Entity
                                    @DiscriminatorValue ("J")
       // gets e sets...
                                    public class PessoaJuridica extends Pessoa {
     }
                                      @Column(name="ie")
                                      private String IE;
                                      @Column(name="cnpj")
                                      private String CNPJ;

                                                 // gets e sets...
                                             }
                                                                                   6
Programação II - Prof. Fernando dos Santos



   Tabela por hierarquia de classes
   Vantagens e desvantagens
   • Vantagens
          – é a mais simples de implementar (em Java e no BD)
          – ótima performance em consultas, pois só há uma tabela.

   • Desvantagens
          – não é normalizada
                 • desperdício de espaço com colunas que ficarão nulas no banco.
          – não permite uso da restrição not null
                 • ex: CPF not null




                                                                                   7
Programação II - Prof. Fernando dos Santos



   Tabela por classe concreta
   Definição
   • Uma tabela é criada para cada classe concreta
           – classe concreta é aquela que não é abstrata
   • Os campos comuns são duplicados em cada tabela.

                           Pessoa

                -   id: int
                -   nome: String

                +   gets() e sets()




        PessoaFisica                  PessoaJuridica

    -    RG: String                   -   IE: String
    -    CPF: String                  -   CNPJ: String

    +    gets() e sets()              +   gets() e sets()


                                                            8
Programação II - Prof. Fernando dos Santos



   Tabela por classe concreta
   Geração de PK com campo auto increment
   • Cada tabela possui seu próprio campo PK:

   • Como garantir PK única entre pessoas físicas e jurídicas?
          – auto-increment não atende esta necessidade
   • Soluções
          – usar tabela geradora de sequenciais
                                             nome da coluna para qual o valor
                                               será gerado sequencialmente




                                                   último valor gerado


          – usar SEQUENCES (não disponível no MySQL)
                                                                                9
Programação II - Prof. Fernando dos Santos



   Tabela por classe concreta
   Mapeamento JPA
   • Mapeamento na superclasse
     @Entity
     @Inheritance ( strategy = InheritanceType.TABLE_PER_CLASS )
     public abstract class Pessoa implements Serializable {
                                                                  mapeamento da
         @TableGenerator ( name="SEQUENCIA_PESSOA",             tabela geradora de
                            table="geradora_sequenciais",          sequenciais
                           pkColumnName="nome_coluna_pk",
                        valueColumnName="valor_sequencial_coluna_pk“ )

         @ Id
         @GeneratedValue ( strategy= GenerationType.TABLE,
                             generator="SEQUENCIA_PESSOA“ )
         private int id;
         @Column(name="nome")
         private String nome;
         // gets e sets...
     }
                                                                             10
Programação II - Prof. Fernando dos Santos



   Tabela por classe concreta
   Mapeamento JPA
   • Mapeamento nas subclasses
          – Não é necessário usar anotações diferenciadas
   @Entity
   @Table(name="pessoa_fisica")
   public class PessoaFisica extends Pessoa {
     @Column(name="rg")
     private String RG;                @Entity
     @Column(name="cpf")               @Table(name="pessoa_juridica")
     private String CPF;               public class PessoaJuridica extends Pessoa {
                                         @Column(name="ie")
     // gets e sets..                    private String IE;
   }                                     @Column(name="cnpj")
                                         private String CNPJ;

                                                 // gets e sets..
                                             }
                                                                               11
Programação II - Prof. Fernando dos Santos



   Tabela por classe concreta
   Vantagens e desvantagens
   • Vantagens
          – permite uso da restrição not null

   • Desvantagens
          – modelo relacional ainda não é normalizado
                 • duplicação de colunas em pessoa física e pessoa jurídica
          – chaves primárias sequenciais requerem tratamento diferenciado
          – desempenho pior que tabela única por hierarquia de classes




                                                                              12
Programação II - Prof. Fernando dos Santos



   Tabela por classe e subclasses
   Definição
   • Uma tabela é criada para cada classe e subclasse
   • As tabelas das subclasses possuem chave estrangeira para a
     tabela da classe pai

                           Pessoa

                -   id: int
                -   nome: String

                +   gets() e sets()




        PessoaFisica                  PessoaJuridica

    -    RG: String                   -   IE: String
    -    CPF: String                  -   CNPJ: String

    +    gets() e sets()              +   gets() e sets()


                                                              13
Programação II - Prof. Fernando dos Santos



   Tabela por classe e subclasses
   Mapeamento JPA
   • Mapeamento na superclasse
                       @Entity
                       @Inheritance ( strategy = InheritanceType.JOINED )
                       public abstract class Pessoa implements Serializable {
                         @Id
                         @GeneratedValue
                         private int id;
                         @Column(name="nome")
                         private String nome;

                           // gets e sets...
                       }




                                                                                14
Programação II - Prof. Fernando dos Santos



   Tabela por classe e subclasses
   Mapeamento JPA
   • Mapeamento nas subclasses
    @Entity
    @Table(name="pessoa_fisica")
    @PrimaryKeyJoinColumn (name="id_pessoa")
    public class PessoaFisica extends Pessoa {
      @Column(name="rg")
      private String RG;
      @Column(name="cpf")            @Entity
      private String CPF;            @Table(name="pessoa_juridica")
                                     @PrimaryKeyJoinColumn (name="id_pessoa")
      // gets e sets...              public class PessoaJuridica extends Pessoa {
    }                                  @Column(name="ie")
                                       private String IE;
                                       @Column(name="cnpj")
                                       private String CNPJ;

                                                 // gets e sets...
                                             }                               15
Programação II - Prof. Fernando dos Santos



   Tabela por classe e subclasses
   Vantagens e desvantagens
   • Vantagens
          – modelo relacional 100% normalizado

   • Desvantagens
          – desempenho pior que tabela única por hierarquia de classes




                                                                         16
Programação II - Prof. Fernando dos Santos



   Mapeamento de Herança
   Manipulações (1)
   • Criar pessoa física (1) e jurídica (2) e persistir (3);
          – A manipulação é simples, igual a como já se vem utilizando.

                           PessoaFisica pf = new PessoaFisica(); // (1)
                           pf.setNome("Homer Simpson");
                           pf.setRG("12345");
                           pf.setCPF("123456789");

                           PessoaJuridica pj = new PessoaJuridica(); // (2)
                           pj.setNome("CEAVI");
                           pj.setIE("13579");
                           pj.setCNPJ("10246812345");

                           em.getTransaction().begin();
                           em.persist(pf); // (3)
                           em.persist(pj);
                           em.getTransaction().commit();


                                                                              17
Programação II - Prof. Fernando dos Santos



   Mapeamento de Herança
   Manipulações (2)
   • Consultas polimórficas
          – Buscar todas as pessoas, independente de tipo (física ou juridica)

              Query cons = em.createQuery ("select p from Pessoa p");
              List<Pessoa> pessoas = cons.getResultList();
              for (Pessoa umaPessoa : pessoas){
                  System.out.println(umaPessoa);
               }


          – Buscar somente pessoas físicas
                 • Fazer a consulta sobre a entidade filha
              Query cons = em.createQuery ("select pf from PessoaFisica pf");
              List<Pessoa> pessoas = cons.getResultList();
              for (Pessoa umaPessoa : pessoas){
                  System.out.println(umaPessoa);
               }

                                                                                 18
Programação II - Prof. Fernando dos Santos



   Associações polimórficas
   Mapeamento
   • É possível fazer associações polimórficas entre as entidades.
                                                     Veiculo                                     Pessoa
                                             -   id: int                            -     id: int
                                             -   renavam: String
                                                                   0..*           1 -     nome: String
                                             -   modelo: String
                                                                                      +   gets() e sets()
                                             +   gets() e sets()



  @Entity
  @Table(name="veiculo")                                                      PessoaFisica                  PessoaJuridica

  public class Veiculo implements Serializable {                          -    RG: String                   -   IE: String
                                                                          -    CPF: String                  -   CNPJ: String
    // outros atributos...
                                                                          +    gets() e sets()              +   gets() e sets()


      @ManyToOne
      @JoinColumn ( name="id_pessoa", nullable=false )
      private Pessoa proprietario;

      // gets e sets...
  }
                                                                                                                    19
Programação II - Prof. Fernando dos Santos



   Associações polimórficas
   Consultas
   • Buscar todos os veículos
          – Os proprietários são carregados automáticamente, pelo mapeamento.
                  Query cons = em.createQuery ("select v from Veiculo v");
                  List<Veiculo> veiculos = cons.getResultList();
                  for (Veiculo umVeiculo : veiculos){
                      System.out.println(umVeiculo);
                   }


   • Buscar todos os veículos em que proprietário é Pessoa Física
          Query cons = em.createQuery ("select v
                                              from Veiculo v
                                           where v.proprietario = PessoaFisica ");
          List<Veiculo> veiculos = cons.getResultList();
          for (Veiculo umVeiculo : veiculos){
              System.out.println(umVeiculo);
           }
                                                                                     20
Programação II - Prof. Fernando dos Santos




   Bibliografia
   • BURKE, Bill; MONSON-HAEFEL, Richard. Enterprise
     JavaBeans 3.0. 5.ed. São Paulo: Prentice Hall, 2007. 538 p.




                                                                   21

Mais conteúdo relacionado

Semelhante a 5 jpa-heranca

2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simplesLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-oneLukinha92
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
AULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptAULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptJoberthSilva
 
AULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.pptAULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.pptJoberthSilva
 

Semelhante a 5 jpa-heranca (7)

2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples2 1-jpa-mapeamento-simples
2 1-jpa-mapeamento-simples
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one4 1-jpa-relacionamentos-many-to-one
4 1-jpa-relacionamentos-many-to-one
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
AULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.pptAULA 1 - Classes e Objetos com codigicação Java.ppt
AULA 1 - Classes e Objetos com codigicação Java.ppt
 
AULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.pptAULA 1 - Classes e Objetos.ppt
AULA 1 - Classes e Objetos.ppt
 

Mais de Lukinha92

5 jpa-heranca
5 jpa-heranca5 jpa-heranca
5 jpa-herancaLukinha92
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-manyLukinha92
 
3 jpa-consultas
3 jpa-consultas3 jpa-consultas
3 jpa-consultasLukinha92
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-manyLukinha92
 
3 jpa-consultas
3 jpa-consultas3 jpa-consultas
3 jpa-consultasLukinha92
 
2 2-unidade-persistencia
2 2-unidade-persistencia2 2-unidade-persistencia
2 2-unidade-persistenciaLukinha92
 

Mais de Lukinha92 (8)

5 jpa-heranca
5 jpa-heranca5 jpa-heranca
5 jpa-heranca
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many
 
3 jpa-consultas
3 jpa-consultas3 jpa-consultas
3 jpa-consultas
 
1 jdbc
1 jdbc1 jdbc
1 jdbc
 
4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many
 
3 jpa-consultas
3 jpa-consultas3 jpa-consultas
3 jpa-consultas
 
2 2-unidade-persistencia
2 2-unidade-persistencia2 2-unidade-persistencia
2 2-unidade-persistencia
 
1 jdbc
1 jdbc1 jdbc
1 jdbc
 

5 jpa-heranca

  • 1. Programação II - Prof. Fernando dos Santos Java Persistence API (JPA) Mapeamento de Herança Fernando dos Santos fernando.santos@udesc.br
  • 2. Programação II - Prof. Fernando dos Santos Herança e Banco de Dados • Considere a seguinte situação de herança. Pessoa - id: int - nome: String + gets() e sets() PessoaFisica PessoaJuridica - RG: String - IE: String - CPF: String - CNPJ: String + gets() e sets() + gets() e sets() • Quais tabelas você teria no banco de dados? 2
  • 3. Programação II - Prof. Fernando dos Santos Mapeamento de Herança • JPA disponibiliza 3 estratégias para mapeamento de herança: – Tabela por hierarquia de classes – Tabela por classe concreta – Tabela por classe e subclasse 3
  • 4. Programação II - Prof. Fernando dos Santos Tabela por hierarquia de classes Definição • Uma única tabela é criada para guardar todos os dados – é necessário uma coluna discriminadora, para identificar o tipo de dado armazenado pelo registro (pessoa física ou jurídica) Pessoa - id: int - nome: String + gets() e sets() PessoaFisica PessoaJuridica - RG: String - IE: String - CPF: String - CNPJ: String + gets() e sets() + gets() e sets() 4
  • 5. Programação II - Prof. Fernando dos Santos Tabela por hierarquia de classes Mapeamento JPA • Mapeamento na superclasse @Entity @Table (name="pessoa_fisica_juridica") @Inheritance (strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn ( name="discriminador", discriminatorType= DiscriminatorType.STRING) public abstract class Pessoa implements Serializable { @Id @GeneratedValue private int id; @Column(name="nome") private String nome; // métodos get/set } 5
  • 6. Programação II - Prof. Fernando dos Santos Tabela por hierarquia de classes Mapeamento JPA • Mapeamento nas subclasses @Entity @DiscriminatorValue ("F") public class PessoaFisica extends Pessoa{ @Column(name="rg") private String RG; @Column(name="cpf") private String CPF; @Entity @DiscriminatorValue ("J") // gets e sets... public class PessoaJuridica extends Pessoa { } @Column(name="ie") private String IE; @Column(name="cnpj") private String CNPJ; // gets e sets... } 6
  • 7. Programação II - Prof. Fernando dos Santos Tabela por hierarquia de classes Vantagens e desvantagens • Vantagens – é a mais simples de implementar (em Java e no BD) – ótima performance em consultas, pois só há uma tabela. • Desvantagens – não é normalizada • desperdício de espaço com colunas que ficarão nulas no banco. – não permite uso da restrição not null • ex: CPF not null 7
  • 8. Programação II - Prof. Fernando dos Santos Tabela por classe concreta Definição • Uma tabela é criada para cada classe concreta – classe concreta é aquela que não é abstrata • Os campos comuns são duplicados em cada tabela. Pessoa - id: int - nome: String + gets() e sets() PessoaFisica PessoaJuridica - RG: String - IE: String - CPF: String - CNPJ: String + gets() e sets() + gets() e sets() 8
  • 9. Programação II - Prof. Fernando dos Santos Tabela por classe concreta Geração de PK com campo auto increment • Cada tabela possui seu próprio campo PK: • Como garantir PK única entre pessoas físicas e jurídicas? – auto-increment não atende esta necessidade • Soluções – usar tabela geradora de sequenciais nome da coluna para qual o valor será gerado sequencialmente último valor gerado – usar SEQUENCES (não disponível no MySQL) 9
  • 10. Programação II - Prof. Fernando dos Santos Tabela por classe concreta Mapeamento JPA • Mapeamento na superclasse @Entity @Inheritance ( strategy = InheritanceType.TABLE_PER_CLASS ) public abstract class Pessoa implements Serializable { mapeamento da @TableGenerator ( name="SEQUENCIA_PESSOA", tabela geradora de table="geradora_sequenciais", sequenciais pkColumnName="nome_coluna_pk", valueColumnName="valor_sequencial_coluna_pk“ ) @ Id @GeneratedValue ( strategy= GenerationType.TABLE, generator="SEQUENCIA_PESSOA“ ) private int id; @Column(name="nome") private String nome; // gets e sets... } 10
  • 11. Programação II - Prof. Fernando dos Santos Tabela por classe concreta Mapeamento JPA • Mapeamento nas subclasses – Não é necessário usar anotações diferenciadas @Entity @Table(name="pessoa_fisica") public class PessoaFisica extends Pessoa { @Column(name="rg") private String RG; @Entity @Column(name="cpf") @Table(name="pessoa_juridica") private String CPF; public class PessoaJuridica extends Pessoa { @Column(name="ie") // gets e sets.. private String IE; } @Column(name="cnpj") private String CNPJ; // gets e sets.. } 11
  • 12. Programação II - Prof. Fernando dos Santos Tabela por classe concreta Vantagens e desvantagens • Vantagens – permite uso da restrição not null • Desvantagens – modelo relacional ainda não é normalizado • duplicação de colunas em pessoa física e pessoa jurídica – chaves primárias sequenciais requerem tratamento diferenciado – desempenho pior que tabela única por hierarquia de classes 12
  • 13. Programação II - Prof. Fernando dos Santos Tabela por classe e subclasses Definição • Uma tabela é criada para cada classe e subclasse • As tabelas das subclasses possuem chave estrangeira para a tabela da classe pai Pessoa - id: int - nome: String + gets() e sets() PessoaFisica PessoaJuridica - RG: String - IE: String - CPF: String - CNPJ: String + gets() e sets() + gets() e sets() 13
  • 14. Programação II - Prof. Fernando dos Santos Tabela por classe e subclasses Mapeamento JPA • Mapeamento na superclasse @Entity @Inheritance ( strategy = InheritanceType.JOINED ) public abstract class Pessoa implements Serializable { @Id @GeneratedValue private int id; @Column(name="nome") private String nome; // gets e sets... } 14
  • 15. Programação II - Prof. Fernando dos Santos Tabela por classe e subclasses Mapeamento JPA • Mapeamento nas subclasses @Entity @Table(name="pessoa_fisica") @PrimaryKeyJoinColumn (name="id_pessoa") public class PessoaFisica extends Pessoa { @Column(name="rg") private String RG; @Column(name="cpf") @Entity private String CPF; @Table(name="pessoa_juridica") @PrimaryKeyJoinColumn (name="id_pessoa") // gets e sets... public class PessoaJuridica extends Pessoa { } @Column(name="ie") private String IE; @Column(name="cnpj") private String CNPJ; // gets e sets... } 15
  • 16. Programação II - Prof. Fernando dos Santos Tabela por classe e subclasses Vantagens e desvantagens • Vantagens – modelo relacional 100% normalizado • Desvantagens – desempenho pior que tabela única por hierarquia de classes 16
  • 17. Programação II - Prof. Fernando dos Santos Mapeamento de Herança Manipulações (1) • Criar pessoa física (1) e jurídica (2) e persistir (3); – A manipulação é simples, igual a como já se vem utilizando. PessoaFisica pf = new PessoaFisica(); // (1) pf.setNome("Homer Simpson"); pf.setRG("12345"); pf.setCPF("123456789"); PessoaJuridica pj = new PessoaJuridica(); // (2) pj.setNome("CEAVI"); pj.setIE("13579"); pj.setCNPJ("10246812345"); em.getTransaction().begin(); em.persist(pf); // (3) em.persist(pj); em.getTransaction().commit(); 17
  • 18. Programação II - Prof. Fernando dos Santos Mapeamento de Herança Manipulações (2) • Consultas polimórficas – Buscar todas as pessoas, independente de tipo (física ou juridica) Query cons = em.createQuery ("select p from Pessoa p"); List<Pessoa> pessoas = cons.getResultList(); for (Pessoa umaPessoa : pessoas){ System.out.println(umaPessoa); } – Buscar somente pessoas físicas • Fazer a consulta sobre a entidade filha Query cons = em.createQuery ("select pf from PessoaFisica pf"); List<Pessoa> pessoas = cons.getResultList(); for (Pessoa umaPessoa : pessoas){ System.out.println(umaPessoa); } 18
  • 19. Programação II - Prof. Fernando dos Santos Associações polimórficas Mapeamento • É possível fazer associações polimórficas entre as entidades. Veiculo Pessoa - id: int - id: int - renavam: String 0..* 1 - nome: String - modelo: String + gets() e sets() + gets() e sets() @Entity @Table(name="veiculo") PessoaFisica PessoaJuridica public class Veiculo implements Serializable { - RG: String - IE: String - CPF: String - CNPJ: String // outros atributos... + gets() e sets() + gets() e sets() @ManyToOne @JoinColumn ( name="id_pessoa", nullable=false ) private Pessoa proprietario; // gets e sets... } 19
  • 20. Programação II - Prof. Fernando dos Santos Associações polimórficas Consultas • Buscar todos os veículos – Os proprietários são carregados automáticamente, pelo mapeamento. Query cons = em.createQuery ("select v from Veiculo v"); List<Veiculo> veiculos = cons.getResultList(); for (Veiculo umVeiculo : veiculos){ System.out.println(umVeiculo); } • Buscar todos os veículos em que proprietário é Pessoa Física Query cons = em.createQuery ("select v from Veiculo v where v.proprietario = PessoaFisica "); List<Veiculo> veiculos = cons.getResultList(); for (Veiculo umVeiculo : veiculos){ System.out.println(umVeiculo); } 20
  • 21. Programação II - Prof. Fernando dos Santos Bibliografia • BURKE, Bill; MONSON-HAEFEL, Richard. Enterprise JavaBeans 3.0. 5.ed. São Paulo: Prentice Hall, 2007. 538 p. 21