Когда они появляются на поле / получателе
@Entity
, чем они отличаются? (Я сохраняю сущность через Hibernate ).К какой структуре и / или спецификации принадлежит каждый из них?
@NotNull
находится внутриjavax.validation.constraints
. вjavax.validation.constraints.NotNull
javadoc написаноАннотированный элемент не должен быть нулевым
но это не говорит о представлении элемента в базе данных, так зачем мне добавлять ограничение
nullable=false
к столбцу?
источник
@NotNull
,@Size
,@Min
,@Max
и т.д., и переводить те в ограничениях базы данных.В самых последних версиях провайдера JPA hibernate применяются ограничения проверки bean-компонентов (JSR 303), например
@NotNull
по умолчанию для DDL (благодаряhibernate.validator.apply_to_ddl property
значениям по умолчаниюtrue
). Но нет никакой гарантии, что другие провайдеры JPA сделают или даже смогут это сделать.Вы должны использовать аннотации проверки бобов, такие как
@NotNull
чтобы гарантировать, что для свойств bean-компонентов задано непустое значение, при проверке Java-бинов в JVM (это не имеет ничего общего с ограничениями базы данных, но в большинстве ситуаций должно соответствовать им).Вы должны дополнительно использовать аннотацию JPA, например,
@Column(nullable = false)
чтобы давать подсказки провайдеру jpa для создания правильного DDL для создания столбцов таблицы с необходимыми ограничениями базы данных. Если вы можете или хотите положиться на поставщика JPA, такого как Hibernate, который по умолчанию применяет ограничения проверки bean-компонентов к DDL, то вы можете их опустить.источник
Интересно отметить, что все источники подчеркивают, что @Column (nullable = false) используется только для генерации DDL.
Однако даже если аннотации @NotNull нет, а для параметра hibernate.check_nullability задано значение true, Hibernate выполнит проверку сущностей, которые необходимо сохранить.
Он вызовет PropertyValueException, сообщив, что «свойство not-null ссылается на нулевое или временное значение», если атрибуты nullable = false не имеют значений, даже если такие ограничения не реализованы на уровне базы данных.
Дополнительная информация о параметре hibernate.check_nullability доступна здесь: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .
источник
JPA
@Column
Аннотацияnullable
Атрибут@Column
аннотации имеет две цели:Инструмент генерации схемы
Инструмент генерирования схемы HBM2DDL преобразует
@Column(nullable = false)
атрибут сущности вNOT NULL
ограничение для связанного столбца таблицы при генерацииCREATE TABLE
оператора.Постоянство контекста Flush
При очистке контекста персистентности Hibernate ORM также использует
@Column(nullable = false)
атрибут сущности:Если проверка завершится неудачно, Hibernate сгенерирует a
PropertyValueException
и предотвратит выполнение инструкции INSERT или UPDATE:@NotNull
Аннотация для проверки бобов@NotNull
Аннотаций определяется Bean Validation и, так же , как Hibernate ORM является наиболее популярной реализацией JPA, наиболее популярной реализация Bean Validation является Hibernate Validator рамки.При использовании Hibernate Validator вместе с Hibernate ORM Hibernate Validator будет выдавать
ConstraintViolation
при проверке сущности.источник