@Column

@Column настраивает отображение свойства на столбец.

@Column(
    name = "display_name",
    nullable = false,
    length = 200
)
private String name;

Часто используемые параметры

  • name — физическое имя столбца;
  • nullable — допустимость NULL в генерируемой схеме;
  • unique — декларативное уникальное ограничение на один столбец;
  • length, precision, scale — параметры DDL;
  • insertable, updatable — участвует ли свойство в INSERT/UPDATE;
  • columnDefinition — фрагмент DDL конкретной СУБД; снижает переносимость.

insertable=false, updatable=false полезно, если один физический столбец отображён второй раз только для чтения. Это не делает само значение вычисляемым и не запрещает другим приложениям менять столбец.

Схема — источник истины

Аннотации помогают разработчику и генератору DDL, но production-схемой управляют миграции. Особое внимание:

  • длина строки и кодировка;
  • точность денежных значений;
  • составная уникальность;
  • значения по умолчанию: Java default, Hibernate default и DB default работают в разные моменты.

Вопросы для повторения

  1. Что случится без @Column? Провайдер выведет имя по naming strategy и применит defaults.
  2. unique=true подходит для составного ключа? Нет, составное ограничение задают на уровне таблицы/миграции.
  3. Зачем insertable=false? Исключить столбец из генерируемого INSERT для этого свойства.
  4. Почему columnDefinition используют осторожно? Это SQL конкретной БД и он конфликтует с переносимостью.

Связано: Основные аннотации Hibernate, Аннотация Basic.