java - embeddedid - embeddable traduccion
¿Qué significa @AttributeOverride? (5)
Actualmente estoy volviendo a la velocidad con EJB y mientras estuve fuera, cambió drásticamente (hasta ahora para mejor). Sin embargo, me he topado con un concepto con el que estoy luchando y me gustaría entender mejor, ya que parece que se utiliza en nuestro código (donde trabajo, no en mí y en todas las voces en mi cabeza) bastante.
Este es el ejemplo que he encontrado en un libro. Es parte de un ejemplo que muestra cómo usar la anotación @EmbeddedId
:
@Entity
public class Employee implements java.io.Serializable
{
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="lastName", column=@Column(name="LAST_NAME"),
@AttributeOverride(name="ssn", column=@Column(name="SSN"))
})
private EmbeddedEmployeePK pk;
...
}
La clase EmbeddedEmployeePK
es una clase @Embeddable
bastante sencilla que define un par de @Columns
: lastName
y ssn
.
Oh, y levanté este ejemplo de Enterprise JavaBeans 3.1 de O''Reilly por Rubinger & Burke.
Gracias de antemano por cualquier ayuda que pueda darme.
La clase EmbeddedEmployeePK es una clase @Embeddable bastante sencilla que define un par de @Columns: lastName y ssn.
No del todo: EmbeddedEmployeePK
define un par de propiedades , que luego se asignan a columnas. Las anotaciones @AttributeOverride
permiten anular las columnas a las que se asignan las propiedades de la clase incrustada.
El caso de uso para esto es cuando la clase incorporable se usa en diferentes situaciones donde los nombres de sus columnas son diferentes, y se requiere algún mecanismo para permitirle cambiar esas asignaciones de columnas. Por ejemplo, supongamos que tiene una entidad que contiene dos instancias separadas de la misma incrustable: no pueden mapearse a los mismos nombres de columna.
JPA intenta asignar nombres de campo a nombres de columna en un origen de datos, por lo que lo que está viendo aquí es la traducción entre el nombre de una variable de campo y el nombre de una columna en una base de datos.
Se dice que los atributos que componen el ID incorporado pueden tener predefinidos (a través de mapeos explícitos o implícitos) nombres de columnas. Al usar @AttributeOverride
usted está diciendo "ignore qué otra información tiene con respecto a qué columna está almacenada y use la que especifico aquí".
También puede anular otras propiedades de columna (no solo nombres).
Supongamos que desea cambiar la longitud del SSN en función de quién incruste su componente. Puede definir una @AttributeOverride
para la columna como esta:
@AttributeOverrides({
@AttributeOverride(name = "ssn", column = @Column(name = "SSN", length = 11))
})
private EmbeddedEmployeePK pk;
Consulte "2.2.2.4. Objetos incrustados (también conocidos como componentes)" en la documentación de Anotaciones de Hibernate.
Para preservar otras propiedades de @Column
(como name
y nullable
), manténgalas en la columna reemplazada de la misma forma que usted especificó en la columna original.
En la clase UserDetails, he reemplazado homeAddress
y officeAddress
con Address