entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Hola,
Alguien me podría explicar la diferencia entre estas tres anotaciones en JPA:

@NotNull, @Basic(optional = false) y @Column(nullable = false)

Y pueden ser usadas al mismo tiempo?
por ejemplo en esta manera:

@NotNull 
@Basic(optional = false)  
@Column(nullable = false)
private int idUsuario;

Gracias de antemano.

1 Respuesta

2votos

kaiba78987 Puntos2300

Hola.

Por lo que he podido leer en la documentación de Java EE, hay escasas diferencias, pero sutiles:

@NotNull impide que el valor del objeto sea nulo.
@Basic(optional=false) indica que el valor del campo o la propiedad no puede ser nulo. Se puede usar para generar el esquema de base de datos a partir de la entidad.
@Column(nullable=false) se refiere a que el campo de la tabla de la base de datos no puede ser nulo.

Creo que la diferencia estará en que, si usas la tercera, te permitirá crear objetos con valores nulos en los campos marcados, pero no persistirlos. Con las otras dos, las propiedades marcadas no deberían poder ser nulas en el propio objeto. Creo que la diferencia entre @NotNull y @Basic(optional=false), es que esta segunda te permite marcar los métodos get. Aunque esto te lo digo sólo leyendo la documentación, no lo he probado.

Espero que te sea útil :)

0voto

Numen comentado

Gracias, me ha sido útil tu respuesta,
he hecho algunas pruebas y he encontrado que...
@NotNull es un validator y que no necesariamente se relaciona con JPA, si se le pone a un objeto un campo en null, y que tenga esta anotación, no compila ya que lanza una excepción.
@Column(nullable = false) afecta al esquema de la base de datos haciendo que la columna pueda ser null, tampoco compila si al objeto se le pone null en un campo, pero el error es por parte del gestor de la base de datos y no de java.
@Basic(optional=false) Este no me ha quedado muy claro, pero indica al proveedor de persistencia que el atributo del objeto no puede ser null. Supongo que si el proveedor de persistencia intenta hacer algunos joins y si la anotación es(optional=true) arrojará una advertencia sobre datos nulos...

Encontré que:
Se pueden usar juntos sin que haya redundancia ya que si pongo sólo @NotNull, en el esquema de la BD al realizar "describe column" aparece "null --> yes", por lo que mencionaba sobre que es un validator y por lo tanto si se quiere modificar la tabla en su esquema se utilizaría @Column.

Si alguien sabe algo más sobre esto les agradeceré si comentan ya que apenas empiezo a estudiar sobre el tema.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta