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?
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?
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"));