Если Spring приложение запускается, например, с параметром spring.jpa.hibernate.ddl-auto=update
, то Hibernate сам берёт на себя задачу по созданию и модификации схемы БД в соответствии с описаниями классов предметной области в приложении. С помощью аннотаций можно уточнять некоторые настройки схемы, в том числе ограничения колонок на допустимость/недопустимость значений NULL.
Создадим базовое веб-приложение на связке Spring Boot 3 + Hibernate + PostgreSQL
Указать HIbernate’у, что колонка таблицы должна быть создана с органичением NOT NULL можно, указав над соответствующим полем либо аннотацию @Basic с параметром optional = false, либо аннотацию @Column с параметром nullable = false.
Проиллюстрируем использование этих аннотаций. Создадим класс предметной следующего содержания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@Entity public class ManageNullability { @Id private Long id; @Basic(optional = false) private String basicOptionalFalse; @Basic(optional = true) private String basicOptionalTrue; @Column(nullable = false) private String columnNullableFalse; @Column(nullable = true) private String columnNullableTrue; } |
Запустим приложение, чтобы Hibernate создал соответствующую таблицу и посмотрим её описание в psql с помощью команды \d+ table_name
.
Из описания таблицы видно, что полю basicOptionalFalse, помоченному аннотацией @Basic(optional = false) была создана соответствующая колонка basic_optional_false с ограничение NOT NULL. То же самое сделано для поля columnNullableFalse.
Следует отметить, что проверка на NULL в данном случае будет происходить в базе данных. В приложении такие поля нужно либо проверять вручную перед сохранением в БД, либо использовать аннотации валидации, в частности @NotNull, которые упрощают валидацию сущностей на предмет соответствия тем или иным ограничениям.