Hibernate - Anotação @Column
A anotação
é usada para realizar o mapeamento do campo da entidade com uma coluna do banco de dados.@Column
Para atributos básicos segundo a especificação JPA a anotação
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
, 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.@Column(name = "NOME")
A anotação
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.@Column
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;
}