L' @Columnannotation JPA
L' nullableattribut de l' @Columnannotation a deux objectifs:
- il est utilisé par l'outil de génération de schéma
- il est utilisé par Hibernate lors du vidage du contexte de persistance
Outil de génération de schéma
L'outil de génération de schéma HBM2DDL traduit l' @Column(nullable = false)attribut d'entité en une NOT NULLcontrainte pour la colonne de table associée lors de la génération de l' CREATE TABLEinstruction.
Comme je l'ai expliqué dans le Guide de l'utilisateur d'Hibernate , il est préférable d'utiliser un outil comme Flyway au lieu de s'appuyer sur le mécanisme HBM2DDL pour générer le schéma de base de données.
Rinçage du contexte de persistance
Lors du vidage du contexte de persistance, Hibernate ORM utilise également l' @Column(nullable = false)attribut d'entité:
new Nullability( session ).checkNullability( values, persister, true );
Si la validation échoue, Hibernate lance un PropertyValueExceptionet empêche l'exécution forcée de l'instruction INSERT ou 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]
);
}
Pour plus de détails sur le fonctionnement du mécanisme de vidage Hibernate, consultez cet article .
L' @NotNullannotation de validation du bean
L' @NotNullannotation est définie par Bean Validation et, tout comme Hibernate ORM est l'implémentation JPA la plus populaire, l'implémentation Bean Validation la plus populaire est le framework Hibernate Validator .
Lorsque vous utilisez Hibernate Validator avec Hibernate ORM, Hibernate Validator lance un ConstraintViolationlors de la validation de l'entité.