false - Java Persistence/JPA: @Column vs @Basic
@basic jpa (3)
Además de la respuesta de @djna , vale la pena señalar que @Basic
debe ser comparado con @OneToMany
, @ManyToOne
y @ManyToMany
. Solo uno de estos se puede especificar en cualquier propiedad.
@Column
y @JoinColumn
se pueden especificar junto con cualquiera de estos para describir las propiedades de columna de la base de datos.
Estos son dos conjuntos de anotaciones que pueden usarse juntas, pero solo se puede usar una anotación de cada conjunto a la vez.
¿Cuál es la diferencia entre @Column
y @Basic
anotaciones en JPA? Pueden ser usados juntos? ¿Deberían usarse juntos? ¿O uno de ellos es suficiente?
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 uno en el que la clase de atributo es un tipo simple como String, Number, Date o una primitiva. El valor de un atributo básico se puede asignar directamente al valor de la columna en la base de datos.
Los tipos y las conversiones compatibles dependen de la implementación de JPA y de la plataforma de la base de datos. Cualquier atributo básico que utiliza un tipo que no se asigna directamente a un tipo de base de datos se puede serializar a un tipo de base de datos binario.
La forma más fácil de asignar 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 mapeará automáticamente como básico, e incluso serializado 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.
@Basic
significa que un atributo debe persistir y se debe usar un mapeo estándar. Tiene parámetros que le permiten especificar si el atributo se va a cargar de forma perezosa y si es anulable.@Column
permite especificar el nombre de la columna en la base de datos en la que se persistirá el atributo.
Si especifica uno sin el otro, entonces obtiene un comportamiento predeterminado que es razonable, por lo que comúnmente la gente usa solo uno, con la excepción de casos especiales.
Entonces, si queríamos una carga diferida de un atributo y especificar un nombre de columna, podemos decir
@Basic(fetch=FetchType.LAZY)
@Column(name="WIBBLE")
Si necesitamos el comportamiento predeterminado, no perezoso, solo la @Column
habría sido suficiente.