L' @Column
annotazione dell'APP
L' nullable
attributo @Column
dell'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 NULL
vincolo 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 PropertyValueException
e 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 @NotNull
Annotation
L' @NotNull
annotazione è 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 ConstraintViolation
durante la convalida dell'entità.