JPA: Como usar a anotação @Id

Nesta documentação você aprenderá a utilizar a anotação @Id para informar qual campo de uma entidade representa a chave primária da respectiva tabela no banco de dados.

Ao mapearmos nossas classes às tabelas do banco de dados, um passo fundamental é definir qual campo dessa classe estará relacionado à chave primária da tabela. Assim como precisamos ter essa chave em toda tabela, precisamos de um campo equivalente em toda entidade.

Neste documento será apresentado como utilizar a anotação @Id.

Tópicos

@Id
Exemplo prático

@Id

A anotação I@Id é utilizada para informar ao JPA qual campo/atributo de uma entidade estará relacionado à chave primária da respectiva tabela no banco de dados. Essa é uma anotação obrigatória e um erro será gerado em tempo de execução caso ela não esteja presente.

A seguir temos um exemplo de uso:

@Entity public class Produto { @Id private long id; }

Com este código, a entidade Produto terá como identificador único o campo id, e esse campo estará relacionado à coluna de mesmo nome na tabela Produto, a qual representa a chave primária (primary key).

Caso a coluna possua um nome diferente (id_produto, por exemplo), devemos utilizar a anotação @Column sobre o respectivo campo da seguinte forma: @Column(name=”id_produto”).

Nota: A anotação @Id faz parte do pacote javax.persistence.

O campo que representa a chave primária pode ser de qualquer tipo primitivo do Java, wrappers de tipos primitivos (como Integer e Long), String, java.util.Date, java.sql.Date, java.math.BigDecimal ou java.math.BigInteger.

Quando declaramos apenas essa anotação, a responsabilidade de criar o identificador será da nossa aplicação, isto é, do nosso código, o que, em muitos casos, não é indicado. Para que a geração de ids seja controlada pelo provedor de persistência (Hibernate, por exemplo), fazemos uso da anotação @GeneratedValue logo após @Id.

@Entity public class Produto { @Id @GeneratedValue private long id; }

Com este código, o id da entidade Produto será gerenciado pelo provedor de persistência, que se comunicará com o banco de dados para geração do valor da chave primária.

Exemplo prático

Suponha que criamos a classe Pessoa e desejamos que CPF seja o campo responsável por identificar unicamente uma pessoa no sistema. Com isso em mente, podemos programar o código abaixo:

@Entity public class Pessoa { @Id private String cpf; private String nome; //getters e setters omitidos... }

Ao executar esse código, será criada uma tabela de nome Pessoa no banco de dados (caso não exista e assim seja configurado) com as colunas nome e cpf, sendo cpf a chave primária.

Artigos relacionados