@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 работают в разные моменты.
Вопросы для повторения
- Что случится без
@Column? Провайдер выведет имя по naming strategy и применит defaults. unique=trueподходит для составного ключа? Нет, составное ограничение задают на уровне таблицы/миграции.- Зачем
insertable=false? Исключить столбец из генерируемого INSERT для этого свойства. - Почему
columnDefinitionиспользуют осторожно? Это SQL конкретной БД и он конфликтует с переносимостью.
Связано: Основные аннотации Hibernate, Аннотация Basic.