L' @Columnannotazione dell'APP
L' nullableattributo @Columndell'annotazione ha due scopi:
- viene utilizzato dallo strumento di generazione dello schema
- viene utilizzato da Hibernate durante lo svuotamento del contesto di persistenza
Strumento di generazione dello schema
Lo strumento di generazione dello schema HBM2DDL traduce l' @Column(nullable = false)attributo di entità in un NOT NULLvincolo per la colonna della tabella associata durante la generazione dell'istruzione CREATE TABLE.
Come ho spiegato nella Guida dell'utente di Hibernate , è meglio utilizzare uno strumento come Flyway invece di fare affidamento sul meccanismo HBM2DDL per generare lo schema del database.
Flusso di contesto di persistenza
Durante lo svuotamento del contesto di persistenza, Hibernate ORM utilizza anche l' @Column(nullable = false)attributo entità:
new Nullability( session ).checkNullability( values, persister, true );
Se la convalida fallisce, Hibernate lancerà a PropertyValueExceptione impedisce che le istruzioni INSERT o UPDATE vengano eseguite in modo necessario:
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]
);
}
Per maggiori dettagli sul funzionamento del meccanismo di scarico Hibernate, consulta questo articolo .
The Bean Validation @NotNullAnnotation
L' @NotNullannotazione è definita da Bean Validation e, proprio come Hibernate ORM è l'implementazione JPA più popolare, l'implementazione Bean Validation più popolare è il framework Hibernate Validator .
Quando si utilizza Hibernate Validator insieme a Hibernate ORM, Hibernate Validator lancerà a ConstraintViolationdurante la convalida dell'entità.