embeddedid java jpa

java - @embeddedid



Anotaciones Java-JPA @Basic y @ Embedded (3)

Estoy aprendiendo JPA de este tutorial .

Tengo algunas confusiones en la comprensión de las siguientes anotaciones:

  • @Basic
  • @Embedded

Los campos de un tipo incrustable son por defecto persistentes, como si estuvieran anotados con @Embedded.

Si los campos de tipos incrustables son predeterminados a persistentes, entonces ¿por qué necesitaríamos la anotación @Embedded


@BASIC

La anotación básica se puede aplicar a una propiedad persistente o variable de instancia de cualquiera de los siguientes tipos:

Tipos primitivos de Java, envoltorios de los tipos primitivos, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java. sql.Timestamp, byte [], Byte [], char [], Character [], enumeraciones y cualquier otro tipo que implemente java.io.Serializable.

El uso de la anotación básica es opcional para los campos persistentes y las propiedades de estos tipos. Si la anotación Básica no está especificada para dicho campo o propiedad, se aplicarán los valores predeterminados de la anotación Básica.

Ejemplo:

@Basic protected String name;

y

@Basic(fetch=LAZY) protected String getName() { return name; }

@Incrustado

Especifica un campo o propiedad persistente de una entidad cuyo valor es una instancia de una clase incrustable. La clase incrustable debe anotarse como Embeddable.

Ejemplo 1:

@Embedded @AttributeOverrides({ @AttributeOverride(name="startDate", column=@Column("EMP_START")), @AttributeOverride(name="endDate", column=@Column("EMP_END")) }) public EmploymentPeriod getEmploymentPeriod() { ... }

Ejemplo 2:

@Entity public class Project { @EmbeddedId ProjectId id; //other fields } @Embeddable Class ProjectId { int departmentId; long projectId; }

Especificación de persistencia JSR y referencia de origen


En el mapeo ORM, la granularidad de su modelo de objetos puede ser más fina que la de su base de datos.

Por ejemplo, puede tener un registro de Person en su base de datos que puede descomponerse más para contener una referencia a un objeto de Address en su modelo. Ahí es donde @Embeddable anotaciones @Embedded y @Embeddable . Simplemente establecen una relación donde una Entity se puede almacenar como parte de otra.

En cuanto a la anotación @Basic , es la forma más simple de mapeo que se aplica por defecto a tipos primitivos como int y float y sus wrappers, así como enums. Se puede obtener más información aquí: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-property


La anotación @Embeddable permite especificar una clase cuyas instancias se almacenan como parte intrínseca de la entidad propietaria. Esta anotación no tiene atributos .

@Embeddable public class EmploymentPeriod { java.util.Date startDate; java.util.Date endDate; ... }

La anotación @Embedded se usa para especificar un campo persistente o propiedad de una entidad cuyo valor es una instancia de una clase incrustable. De forma predeterminada, las definiciones de columna especificadas en la clase @Embeddable aplican a la tabla de la entidad propietaria pero puede @AttributeOverride mediante @AttributeOverride :

@Embedded @AttributeOverrides({ @AttributeOverride(name="startDate", column=@Column(name="EMP_START")), @AttributeOverride(name="endDate", column=@Column(name="EMP_END")) }) public EmploymentPeriod getEmploymentPeriod() { ... }

Con respecto a la anotación @Basic opcional, puede usarla para configurar el tipo de búsqueda en LAZY y configurar la asignación para prohibir valores nulos (para tipos no primitivos) con el atributo optional .

@Basic(fetch=LAZY) protected String getName() { return name; }

También puede colocarlo en un campo o propiedad para marcarlo explícitamente como persistente (para fines de documentación).