2012-03-29 13 views

risposta

19

Ecco una bella spiegazione da Object DB.

designare un attributo di relazione ManyToOne o OnetoOne che fornisce la mappatura per una chiave EmbeddedId primaria, un attributo all'interno di una chiave primaria EmbeddedId, oppure una semplice chiave primaria della controllante. L'elemento value specifica l'attributo all'interno di una chiave composta a cui corrisponde l'attributo di relazione. Se la chiave primaria dell'entità è dello stesso tipo Java della chiave primaria dell'entità a cui fa riferimento la relazione, l'attributo value non viene specificato.

// 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; 
} 

Leggere il API Docs qui.

1

Ho trovato questa nota anche utile: @MapsId in annotazione di ibernazione mappa una colonna con la colonna di un'altra tabella.

Può essere utilizzato anche per condividere la stessa chiave primaria tra 2 tavoli.

Esempio:

@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; 
    ... 
} 
Problemi correlati