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
при проверке сущности.