Respuestas:
@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.
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.
Vale la pena señalar que Basic está diseñado para campos primitivos.
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes
Un atributo básico es aquel en el que la clase de atributo es de un tipo simple como Cadena, Número, Fecha o una primitiva. El valor de un atributo básico puede correlacionarse directamente con el valor de la columna en la base de datos.
Los tipos y conversiones admitidos dependen de la implementación de JPA y la plataforma de base de datos. Cualquier atributo básico que utilice un tipo que no se asigne directamente a un tipo de base de datos puede serializarse a un tipo de base de datos binaria.
La forma más sencilla de mapear un atributo básico en JPA es no hacer nada. Cualquier atributo que no tenga otras anotaciones y no haga referencia a otras entidades se asignará automáticamente como básico, e incluso se serializará si no es un tipo básico. El nombre de la columna para el atributo será predeterminado, con el mismo nombre que el nombre del atributo, en mayúsculas.
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,
@Basic
sin@Column
, razón por la cual las propiedadesoptional
ynullable
existen en ambos. Estoy en lo cierto?