query different diferente java jpa jpa-2.0 nullable

java - diferente - jpa query different



¿Por qué debería especificar @Column(nullable=false)? (3)

Tengo una entidad anotada con @Entity .
Si soy responsable de crear los scripts CREATE TABLE ¿por qué debería especificar @Column( nullable = false ) cuando puedo crear una columna en la base de datos con las palabras clave NOT NULL ? ¿Hay algún ejemplo que muestre los beneficios de usar esta propiedad en un campo?


Además, si su columna tiene nullable = false en la anotación @ManyToOne , Hibernate hace la consulta INNER JOIN a la tabla relacionada. nullable = true da en resultado LEFT JOIN .

Esa es otra diferencia.


En su caso, puede que no haya un beneficio real, pero:

  • si está utilizando su proveedor de jpa para generar su esquema (ya sea vía maven o vía generación automática como hbm2ddl.auto), entonces importa
  • si configura su proveedor de jpa para validar el esquema con el modelo de entidad, entonces necesita que estén sincronizados.

Mejores mensajes de error y manejo de errores, especialmente si también agrega la anotación JSR303 @NotNull .

Si crea la columna como NOT NULL pero no le dice a JPA que no es nula, JPA asumirá que los valores nulos son correctos. Cuando intente guardar un objeto con nulos, procederá a enviarlo a la base de datos y obtendrá un error de nivel de base de datos. Esto aumenta el spam de registro en la base de datos y es mucho más difícil determinar a partir del error qué columna (s) de qué tabla (s) era el problema, y ​​mucho menos volver a asignarlas a sus nombres de JPA.

Si las anota como no nulas, JPA lanzará una excepción antes de guardar, evitando el correo no deseado de registro de DB y generalmente generando un mejor error. En particular, si su proveedor de JPA admite JSR303 y traduce nullable=false en @NotNull internamente o también ha agregado @NotNull , le dará una estructura de datos que puede examinar para ver exactamente qué campos de qué objetos fueron rechazados para qué razones, junto con mensajes de error personalizables personalizables.

Es por eso que debes decirle a JPA sobre los campos NOT NULL . Eso, y es más fácil para los demás que trabajan en su código entender sin tener que leer el esquema DB.