1
resposta

em.find() com chave composta

Professor, o em.find() recebe como parâmetros a classe e pk que quero consultar. Como faço quando possuo uma pk composta por mais de uma coluna e tipos diferentes?

1 resposta

Olá nicolasmarcos-ti,

um dos jeitos de fazer isso é criando uma classe para representar esta chave composta e usá-la no método find.

Por exemplo, vamos supor que eu tenho a classe Conta e eu quero usar o número da conta e a agência juntos como identificador da classe ao invés de uma coluna id. Para isso eu criaria uma classe chamada de IdentificadorConta, que teria estas duas informações:

@Embeddable
public class IdentificadorConta {
    private int numero;
    private String agencia;
    //construtor sem argumentos e construtor recebendo estes dois atributos
    //getters e setters
    //equals e hasCode para com ambos os atributos
}

Ai na classe Conta você teria:

@Entity
public class Conta {
    @EmbeddedId
    public IdentificadorConta id;
    //restante da classe Conta
}

Ai quando for fazer um find, um objeto desta segunda classe seria o parâmetro passado:

em.find(Conta.class, new IdentificadorConta(123, "2076-1"));

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software