Как задать ограничение NOT NULL для столбца в базе данных из Java-приложения?

«Как задать ограничение NOT NULL для столбца в базе данных из Java-приложения?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ограничение можно задать на двух уровнях: на уровне объектно-реляционного отображения (ORM) и на уровне DDL базы данных.

1. На уровне JPA/Hibernate (ORM) Используйте аннотацию @Column с атрибутом nullable = false. Это указание для фреймворка и, опционально, для генерации схемы.

@Entity
@Table(name = "products")
public class Product {
    @Id
    private Long id;

    @Column(name = "product_name", nullable = false)
    private String name; // Hibernate проверит это перед вставкой
}

2. На уровне базы данных (DDL) Ограничение задается непосредственно в SQL-скрипте создания таблицы. Это самый надежный способ.

CREATE TABLE products (
    id BIGINT PRIMARY KEY,
    product_name VARCHAR(255) NOT NULL, -- Ограничение NOT NULL
    price DECIMAL(10, 2) -- Этот столбец может содержать NULL
);

Критические нюансы:

  • Примитивы vs Обертки: Поле типа int в Java не может быть null, но его лучше сопоставлять с NOT NULL в БД. Поле Integer может быть null, и nullable = false предотвратит его сохранение.
  • Генерация схемы: Атрибут nullable = false влияет на автоматическую генерацию DDL (например, при hibernate.hbm2ddl.auto=update). Для существующей БД структуру нужно изменять вручную.
  • Двойная проверка: Ограничение NOT NULL на стороне БД — последний и самый важный рубеж защиты целостности данных.