¿Cuál es la diferencia entre las anotaciones @Column
y @Basic
en JPA? ¿Se pueden usar juntos? ¿Deben usarse juntos? ¿O basta con uno de ellos?
fuente
¿Cuál es la diferencia entre las anotaciones @Column
y @Basic
en JPA? ¿Se pueden usar juntos? ¿Deben usarse juntos? ¿O basta con uno de ellos?
@Basic
significa que un atributo debe persistir y se debe utilizar una asignación estándar. Tiene parámetros que le permiten especificar si el atributo debe cargarse de forma diferida y si acepta valores NULL.
@Column
le permite especificar el nombre de la columna de la base de datos en la que se conservará el atributo.
Si especifica uno sin el otro, obtiene un comportamiento predeterminado que es sensato, por lo que comúnmente la gente usa solo uno con la excepción de casos especiales.
Entonces, si quisiéramos una carga diferida de un atributo y especificar un nombre de columna, podemos decir
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Si necesitáramos el comportamiento predeterminado, no perezoso, entonces solo @Column
habría sido suficiente.
@Basic
sin@Column
, razón por la cual las propiedadesoptional
ynullable
existen en ambos. Estoy en lo cierto?Además de la respuesta de @ djna , vale la pena señalar que
@Basic
debe compararse con@OneToMany
,@ManyToOne
y@ManyToMany
. Solo se puede especificar uno de estos en cualquier propiedad.@Column
y@JoinColumn
se puede especificar junto con cualquiera de estos para describir las propiedades de la columna de la base de datos.Estos son dos conjuntos de anotaciones que se pueden usar juntos, pero solo se puede usar una anotación de cada conjunto a la vez.
fuente
Vale la pena señalar que Basic está diseñado para campos primitivos.
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
fuente
La anotación @Basic se aplica a las entidades JPA, y la de @Column se aplica a las columnas de la base de datos. El atributo opcional de la anotación @Basic define si el campo de la entidad puede ser nulo o no; por otra parte,
fuente