Persistencia de Java / JPA: @ Columna vs @ Básico


¿Cuál es la diferencia entre @Column y @Basic anotaciones en JPA? ¿Se pueden usar juntos? ¿Deberían usarse juntas? ¿O es suficiente uno de ellos?

Author: Hosam Aly, 2009-09-05

3 answers

  • @Basic significa que se debe conservar un atributo y se debe usar una asignación estándar. Tiene parámetros que le permiten especificar si el atributo debe cargarse perezosamente y si es nullable.

  • @Column permite especificar el nombre de la columna de la base de datos en la que se va a conservar el atributo.

Si especifica uno sin el otro, entonces obtiene un comportamiento predeterminado que es sensato, por lo que comúnmente la gente usa solo uno con la excepción de casos especiales.

Así que si queremos una carga lenta 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 el @Column habría sido suficiente.

 135
Author: djna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-05 02:44:53

Además de la respuesta de @ djna , vale la pena señalar que @Basic debe compararse con @OneToMany, @ManyToOne y @ManyToMany. Solo uno de estos se puede especificar 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.

 46
Author: Hosam Aly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-02 14:46:45

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 un tipo simple como String, Number, Date o un primitivo. El valor de un atributo básico se puede asignar directamente al valor de columna en la base de datos.

Los tipos y conversiones soportados dependen de la implementación de JPA y de la plataforma de base de datos. Cualquier atributo básico el uso de un tipo que no se asigna directamente a un tipo de base de datos puede ser serializado a un tipo de base de datos binaria.

La forma más fácil 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, llamado igual que el nombre del atributo, en mayúsculas.

 19
Author: Gab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-14 18:14:10