Ответ
Ограничение можно задать на двух уровнях: на уровне объектно-реляционного отображения (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на стороне БД — последний и самый важный рубеж защиты целостности данных.