column hibernate persistence ejb-3.0 jpa-2.0 hibernate-annotations

column nullable hibernate



ConfusiĆ³n: @NotNull vs @Column(nullable=false) (3)

  1. Cuando aparecen en un campo / getter de una @Entity , ¿cuál es la diferencia entre ellos? (Persisto la entidad a través de hibernación ).

  2. ¿A qué marco y / o especificación pertenece cada uno de ellos?

  3. @NotNull se encuentra dentro de javax.validation.constraints . En el javax.validation.constraints.NotNull javadoc dice

    El 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?


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 se establece en verdadero, Hibernate realizará la validación de las entidades que se conservarán.

Lanzará PropertyValueException diciendo que "la propiedad no-nula hace referencia a un valor nulo o transitorio", si los atributos nullable = false no tienen valores, incluso si dichas 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 .


Las versiones más recientes del proveedor de hibernate JPA aplican las restricciones de validación de @NotNull (JSR 303) como @NotNull a DDL de forma predeterminada (gracias a la hibernate.validator.apply_to_ddl property predeterminado es true ). Pero no hay garantía de que otros proveedores de JPA hagan o incluso tengan la capacidad de hacerlo.

Debe usar anotaciones de validación de bean como @NotNull para asegurarse de que las propiedades de los @NotNull se configuran en un valor no nulo, al validar los beans java 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ían corresponder a ellos) .

Además, debe usar la anotación JPA como @Column(nullable = false) para dar al proveedor de jpa sugerencias para generar el DDL correcto para crear columnas de tabla con las restricciones de base de datos que desee. Si puede o desea confiar en un proveedor de JPA como Hibernate, que aplica las restricciones de validación de beans a DDL de forma predeterminada, puede omitirlas.


@NotNull es una anotación de validación de bean JSR 303 . No tiene nada que ver con las restricciones de la base de datos. Sin embargo, como Hibernate es la implementación de referencia de JSR 303, recoge inteligentemente estas restricciones y las traduce en restricciones de base de datos para usted, de modo que obtiene dos por el precio de una. @Column(nullable = false) es la forma JPA de declarar que una columna no es nula. Es decir, el primero está destinado a la validación y el segundo para indicar los detalles del esquema de la base de datos. Solo está recibiendo ayuda adicional (y bienvenida) de Hibernate en las anotaciones de validación.