Olá Fábio! Tudo bem?
Para lidar com chaves primárias compostas no JPA com Hibernate, você pode usar a anotação @EmbeddedId
ou @IdClass
. Vou te explicar como usar cada uma delas.
Usando @EmbeddedId
:
Primeiro, você precisa criar uma classe embutida que represente a chave composta. Essa classe deve implementar Serializable
e conter os campos que compõem a chave primária.
import java.io.Serializable;
import javax.persistence.Embeddable;
@Embeddable
public class ChaveComposta implements Serializable {
private int id1;
private int id2;
// Construtores, getters, setters, hashCode e equals
}
Depois, na sua entidade, você usa a anotação @EmbeddedId
:
import javax.persistence.Entity;
import javax.persistence.EmbeddedId;
@Entity
public class SuaEntidade {
@EmbeddedId
private ChaveComposta chaveComposta;
private String texto;
// Getters e setters
}
Usando @IdClass
:
Outra abordagem é usar a anotação @IdClass
. Você também precisa de uma classe para representar a chave composta, mas desta vez você não usa @Embeddable
.
import java.io.Serializable;
public class ChaveComposta implements Serializable {
private int id1;
private int id2;
// Construtores, getters, setters, hashCode e equals
}
Na sua entidade, você especifica a classe da chave composta com @IdClass
:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
@Entity
@IdClass(ChaveComposta.class)
public class SuaEntidade {
@Id
private int id1;
@Id
private int id2;
private String texto;
// Getters e setters
}
Ambas as abordagens são válidas, e você pode escolher a que melhor se adapta ao seu caso.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.