2012-03-29 85 views

Respuesta

19

Aquí hay una buena explicación de Object DB.

designa un atributo de relación ManyToOne o OneToOne que proporciona la asignación de una clave de EmbeddedId primaria, un atributo dentro de una clave primaria EmbeddedId, o una clave principal sencilla de la entidad matriz. 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; 
} 

Leer el API Docs aquí.

1

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 utilizar 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; 
    ... 
} 
Cuestiones relacionadas