Umas das formas de utilizar id(pk) composto no JPA é com EmbeddedId, segue abaixo um exemplo ilustrativo de como implementar o @EmbeddedId.
FuncionarioId.java
import javax.persistence.Embeddable; import java.io.Serializable; @Embeddable public class FuncionarioId { private String nome; private String sobreNome;
@Embeddable: Define que é uma classe de composição de Ids, ou seja, todos atributos definidos dentro da classe serão considerados como ids.
Funcionario.java
@Entity public class Funcionario { @EmbeddedId private FuncionarioId funcionarioId; private String email;
@EmbeddedId: Define que o atributo é o id da entidade, dessa forma ele substitui o @Id pelo @EmbeddedId indicando que é um id composto.
script.sql
CREATE TABLE funcionario ( nome character varying(255) NOT NULL, sobrenome character varying(255) NOT NULL, email character varying(255), CONSTRAINT funcionario_pkey PRIMARY KEY (nome, sobrenome) )
Como mencionado acima, todos atributos da classe FuncionarioId serão adicionados a constraint de primary key.