JPA @ColumnАннотация
nullableАтрибут @Columnаннотации имеет две цели:
- он используется инструментом генерации схемы
- он используется Hibernate во время очистки контекста постоянства
Инструмент генерации схемы
Инструмент генерирования схемы HBM2DDL преобразует @Column(nullable = false)атрибут сущности в NOT NULLограничение для связанного столбца таблицы при генерации CREATE TABLEоператора.
Как я объяснил в Руководстве пользователя Hibernate , лучше использовать такой инструмент, как Flyway, а не полагаться на механизм HBM2DDL для генерации схемы базы данных.
Постоянство контекста Flush
При очистке контекста персистентности Hibernate ORM также использует @Column(nullable = false)атрибут сущности:
new Nullability( session ).checkNullability( values, persister, true );
Если проверка завершится неудачно, Hibernate сгенерирует a PropertyValueExceptionи предотвратит выполнение инструкции INSERT или UPDATE:
if ( !nullability[i] && value == null ) {
//check basic level one nullablilty
throw new PropertyValueException(
"not-null property references a null or transient value",
persister.getEntityName(),
persister.getPropertyNames()[i]
);
}
Подробнее о том, как работает механизм сброса Hibernate, читайте в этой статье .
@NotNullАннотация для проверки бобов
@NotNullАннотаций определяется Bean Validation и, так же , как Hibernate ORM является наиболее популярной реализацией JPA, наиболее популярной реализация Bean Validation является Hibernate Validator рамки.
При использовании Hibernate Validator вместе с Hibernate ORM Hibernate Validator будет выдавать ConstraintViolationпри проверке сущности.