Привет, друзья! Сегодня хочу поделиться одной ошибкой, которую часто встречаю в проектах — использование
nullable = true в JPA-сущностях по умолчанию, без осознанного выбора.Когда мы пишем:
@Column(name = "middle_name")
private String middleName;
JPA считает, что поле nullable, даже если по бизнес-логике оно быть пустым не должно. А вот что будет, если вы забыли это уточнить:
1. На уровне БД поле будет
NULLABLE.2. Hibernate не подскажет, что вы забыли заполнить поле.
3. В будущем это приведёт к NPE, особенно при маппинге DTO → Entity.
4. При миграциях Flyway/ Liquibase — возможно несоответствие схемы и модели.
🔍 Что делать?
1. Явно указывать
nullable = false, если поле обязано быть заполнено:
@Column(name = "email", nullable = false)
private String email;
2. Использовать Bean Validation (
@NotNull) — и не забывать включить её в контроллерах, сервисах, Hibernate.3. Проверяйте соответствие схемы и сущностей. Можно использовать плагин Hibernate5DDL или включать валидацию схемы при старте.
📌 Простой совет: по умолчанию всё
@Column(nullable = false), пока не докажете обратное.Берегите свои сущности 😉
📲 Мы в MAX
👉@BookJava

