Cuando aparecen en un campo / captador de un
@Entity
, ¿cuál es la diferencia entre ellos? (Persisto la Entidad a través de Hibernate ).¿A qué marco y / o especificación pertenece cada uno de ellos?
@NotNull
Se encuentra dentrojavax.validation.constraints
. En eljavax.validation.constraints.NotNull
javadoc diceEl elemento anotado no debe ser nulo
pero no habla de la representación del elemento en la base de datos, entonces, ¿por qué agregaría la restricción
nullable=false
a la columna?
fuente
@NotNull
,@Size
,@Min
,@Max
, etc, y los transforma en las limitaciones de bases de datos.Las versiones más recientes del proveedor de JPA hibernate aplican las restricciones de validación de bean (JSR 303) como
@NotNull
DDL de forma predeterminada (gracias a loshibernate.validator.apply_to_ddl property
valores predeterminados detrue
). Pero no hay garantía de que otros proveedores de JPA tengan o incluso tengan la capacidad de hacerlo.Debe usar anotaciones de validación de bean
@NotNull
para asegurarse de que las propiedades de bean se establezcan en un valor no nulo, al validar java beans en la JVM (esto no tiene nada que ver con las restricciones de la base de datos, pero en la mayoría de las situaciones debería corresponderles).Además, debe usar la anotación JPA
@Column(nullable = false)
para dar al proveedor de jpa sugerencias para generar el DDL correcto para crear columnas de tabla con las restricciones de la base de datos que desee. Si puede o quiere confiar en un proveedor de JPA como Hibernate, que aplica las restricciones de validación de bean a DDL de forma predeterminada, puede omitirlas.fuente
Es interesante notar que todas las fuentes enfatizan que @Column (nullable = false) se usa solo para la generación de DDL.
Sin embargo, incluso si no hay una anotación @NotNull, y la opción hibernate.check_nullability está establecida en true, Hibernate realizará la validación de las entidades para que persistan.
Lanzará PropertyValueException diciendo que "la propiedad no nula hace referencia a un valor nulo o transitorio", si nullable = los atributos falsos no tienen valores, incluso si tales restricciones no se implementan en la capa de la base de datos.
Más información sobre la opción hibernate.check_nullability está disponible aquí: http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#configurations-mapping .
fuente
La
@Column
anotación JPAEl
nullable
atributo de la@Column
anotación tiene dos propósitos:Herramienta de generación de esquemas
La herramienta de generación de esquemas HBM2DDL traduce el
@Column(nullable = false)
atributo de entidad a unaNOT NULL
restricción para la columna de la tabla asociada al generar laCREATE TABLE
declaración.Persistencia de la descarga del contexto
Al vaciar el contexto de persistencia, Hibernate ORM también usa el
@Column(nullable = false)
atributo de entidad:Si la validación falla, Hibernate arrojará un
PropertyValueException
, e impide que la instrucción INSERT o UPDATE se ejecute de forma necesaria:La
@NotNull
anotación de validación de frijolesLa
@NotNull
anotació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
ConstraintViolation
mensaje al validar la entidad.fuente