Hibernate - Anotação @Column

Por Gaspar Barancelli Junior em 04 de abril de 2024

A anotação @Column é usada para realizar o mapeamento do campo da entidade com uma coluna do banco de dados.

Para atributos básicos segundo a especificação JPA a anotação @Column pode ser omitida. Nesse caso, a regra de nomeação é que o nome da coluna do banco de dados tenha o mesmo nome da propriedade da classe. Caso essa regra de nomeação não atenda aos seus requisitos, você pode explicitamente dizer ao Hibernate o nome da coluna que deseja utilizar vide exemplo @Column(name = "NOME"), ou até mesmo utilizar outras estratégias de nomeação, mas caso nenhuma das regras existentes de nomeação atenda seus requisitos, é possível criar uma nova regra, a qual veremos em outro post.

A anotação @Column além de nos permitir definir o nome do mapeamento da coluna do banco de dados, também disponibiliza as seguintes propriedades de configuração, onde podemos aplicar ajustes finos no mapeamento de colunas.

Propriedade

Descrição

name

Nome da coluna

nullable

Se a coluna do banco de dados pode receber valores nulos

unique

Se a coluna é uma chave única

length

O comprimento da coluna

precision

Precisão decimal da coluna

scale

Escala para uma coluna do tipo decimal

insertable

Se a coluna deve ser incluída nas instruções de INSERT

updatable

Se a coluna deve ser incluída nas instruções de UPDATE

table

O nome da tabela que contém a coluna

columnDefinition

O fragmento SQL que é usado ao gerar o DDL para a coluna

Exemplo

Dado o seguinte DDL da tabela de Contato:

create table Contato (
   id integer not null primary key auto_increment,
   nome varchar(30) not null,
   sobrenome varchar(60) not null,
   descricao varchar(255),
   favorito boolean,
   website varchar(255),
   primary key (id),
   constraint contato_nome_unique UNIQUE (nome)
)

Temos a seguinte entidade mapeada, utilizando algumas das propriedades apresentadas anteriormente:

@Entity(name = "Contato")
public static class Contato {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private Integer id;

   private Nome nome;

   @Column(name = "descricao")
   private String resumo;

   private URL website;

   private boolean favorito;

}

@Embeddable
public class Nome {

   @Column(nullable = false, length = 30, unique = true, updatable = false)
   private String nome;

   @Column(nullable = false, length = 60, updatable = false)
   private String sobrenome;

}

// Compartilhe esse Post