La @Columnanotación JPA
El nullableatributo de la @Columnanotación tiene dos propósitos:
- es usado por la herramienta de generación de esquemas
- Hibernate lo utiliza durante el vaciado del contexto de persistencia
Herramienta de generación de esquemas
La herramienta de generación de esquemas HBM2DDL traduce el @Column(nullable = false)atributo de entidad a una NOT NULLrestricción para la columna de la tabla asociada al generar la CREATE TABLEdeclaración.
Como expliqué en la Guía del usuario de Hibernate , es mejor usar una herramienta como Flyway en lugar de confiar en el mecanismo HBM2DDL para generar el esquema de la base de datos.
Persistencia de la descarga del contexto
Al vaciar el contexto de persistencia, Hibernate ORM también usa el @Column(nullable = false)atributo de entidad:
new Nullability( session ).checkNullability( values, persister, true );
Si la validación falla, Hibernate arrojará un PropertyValueException, e impide que la instrucción INSERT o UPDATE se ejecute de forma necesaria:
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]
);
}
Para obtener más detalles sobre cómo funciona el mecanismo de descarga Hibernate, consulte este artículo .
La @NotNullanotación de validación de frijoles
La @NotNullanotación está definida por Bean Validation y, al igual que Hibernate ORM es la implementación de JPA más popular, la implementación de Bean Validation más popular es el marco de Hibernate Validator .
Al usar Hibernate Validator junto con Hibernate ORM, Hibernate Validator arrojará un ConstraintViolationmensaje al validar la entidad.