alguien puede por favor explicarme @MapsId en Hibernate?

¿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 de EmbeddedId, un atributo dentro de una clave de primaria de EmbeddedId o una clave principal 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 de 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; } 

Lea los documentos 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; ... }