java - example - alguien puede por favor explicarme @MapsId en Hibernate?
hibernate-annotations maven (2)
¿Puede alguien explicarme @MapsId en Hibernate? Me está costando entenderlo.
Sería genial si uno pudiera explicarlo con un ejemplo y en qué tipo de casos de uso es más aplicable?
Aquí hay una buena explicación de Object DB .
Designa un atributo de relación ManyToOne o OneToOne que proporciona la asignación para una clave principal EmbeddedId, un atributo dentro de una clave primaria EmbeddedId o una clave primaria simple de la entidad principal. El elemento de valor especifica el atributo dentro de una clave compuesta a la que corresponde el atributo de relación. Si la clave principal de la entidad es del mismo tipo Java que la clave primaria de la entidad a la que hace referencia la relación, el atributo de valor no se especifica.
// parent entity has simple primary key
@Entity
public class Employee {
@Id long empId;
String name;
...
}
// dependent entity uses EmbeddedId for composite key
@Embeddable
public class DependentId {
String name;
long empid; // corresponds to primary key type of Employee
}
@Entity
public class Dependent {
@EmbeddedId DependentId id;
...
@MapsId("empid") // maps the empid attribute of embedded id
@ManyToOne Employee emp;
}
Lee los API API aquí.
Encontré esta nota también útil: @MapsId
en la anotación de hibernación mapea una columna con la columna de otra tabla.
Se puede usar también para compartir la misma clave primaria entre 2 tablas.
Ejemplo:
@Entity
@Table(name = "TRANSACTION_CANCEL")
public class CancelledTransaction {
@Id
private Long id; // the value in this pk will be the same as the
// transaction line from transaction table to which
// this cancelled transaction is related
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ID_TRANSACTION", nullable = false)
@MapsId
private Transaction transaction;
....
}
@Entity
@Table(name = "TRANSACTION")
@SequenceGenerator(name = "SQ_TRAN_ID", sequenceName = "SQ_TRAN_ID")
public class Transaction {
@Id
@GeneratedValue(generator = "SQ_TRAN_ID", strategy = GenerationType.SEQUENCE)
@Column(name = "ID_TRANSACTION", nullable = false)
private Long id;
...
}