Аннотация @Column - определение столбца таблицы базы данных.

@Column — аннотирование используется для указания соответствия между атрибутом базовой сущности (Entity класса) и столбцом таблицы базы данных.

Спецификация JPA определяет правила для неявного определения имени столбцов (column). Для атрибутов базового типа правило неявного именования состоит в том, что имя столбца совпадает с именем атрибута. Если это неявное правило именования не удовлетворяет вашим требованиям, вы можете явно указать Hibernate (и другим провайдерам) имя столбца, которое будет использоваться явно.

Рассмотрим сопоставление свойств Entity класса с полями таблицы базы данных на примере сущности для хранения данных о государствах — Country:

package info.deskbook.hibernate.mapping.annotation;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="COUNTRY")
public class Country implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(name="ID_COUNTRY")
	private Long id;
	
	// полное наименование
	@Column(name="FULL_NAME", length = 100, nullable = false)
	private String fullName;
	
	// краткое наименование
	@Column(name="SHORT_NAME", length = 30, nullable = false)
	private String shortName;
	
	// дата основания государства
	@Column(name="DATE_FOUNDATION", nullable = false)
	@Temporal(value = TemporalType.DATE)
	private Date dateFoundation;
	
	// территория государства в кв.км.
	@Column(name="AREA")
	private Long area;
	
	// численность населения
	@Column(name="POPULATION")
	private Long population;
	
	// плотность населения на 1 кв. км.
	@Column(name="POPULATION_DENSITY", precision=12, scale=2, nullable = false)
	private BigDecimal populationDensity;
	
	public Country() {
	}

	/* Определение методов класса
	 * не приводится для краткости */
}

Используя аннотацию @Column указываем явно имена полей таблицы COUNTRY для сопоставления их со свойствами Entity класса. Для этого применяется опция [name]. Дополнительные опции аннотации @Column, кроме явного указания имен полей, позволяет определить и свойства полей. В частности @Column(name="FULL_NAME", length = 100, nullable = false) ограничивает длину символьного поля [length = 100] и определяет ограничение (constaint) [>nullable = false] - поле не может быть пустым.

Список опций аннотации @Column
опция тип значение по умолчанию описание
 name  String  ""  Имя колонки (столбца) таблицы базы данных.
 columnDefinition  String  ""  Фрагмент SQL, который используется при генерации DDL для столбца.
 insertable  boolean  true  Включен ли столбец в операторы SQL INSERT, созданные поставщиком персистентности.
 updatable  boolean  true  Включен ли столбец в операторы SQL UPDATE, созданные поставщиком персистентности.
 length  int  255  Длина значения столбца. Применяется только для столбцов строкового типа.
 nullable  boolean  true  Определяет, может ли столбец базы данных иметь пустое значение (NULL).
 precision  int  0  Точность для десятичного (точного числа) столбца. Применяется, только столбцов числового формата.
 scale  int  0  Количество дробных значений для десятичной (точной цифровой) колонки. Применяется, только если используется десятичный формат данных.
 table  String  ""  Имя таблицы в которой находится столбец.
 unique  boolean  false  Указывает, что в данном столбце могут сохраняться только уникальные значения.