wake-up-neo.com

kann mir bitte jemand @MapsId im Winterschlaf erklären?

Kann mir bitte jemand @MapsId im Ruhezustand erklären? Es fällt mir schwer, das zu verstehen.

Es wäre großartig, wenn man es mit einem Beispiel erklären könnte und in welchen Anwendungsfällen ist es am besten anwendbar?

57
brainydexter

Hier ist eine nette Erklärung von Objekt DB .

Bezeichnet ein ManyToOne- oder OneToOne-Beziehungsattribut, das die Zuordnung für einen EmbeddedId-Primärschlüssel, ein Attribut in einem EmbeddedId-Primärschlüssel oder einen einfachen Primärschlüssel der übergeordneten Entität bereitstellt. Das value-Element gibt das Attribut innerhalb eines zusammengesetzten Schlüssels an, dem das Relationsattribut entspricht. Wenn der Primärschlüssel der Entität vom selben Java Typ ist wie der Primärschlüssel der Entität, auf die die Beziehung verweist, wird das value-Attribut nicht angegeben.

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

Lesen Sie hier das API Docs .

35
ManuPK

Ich fand diese Notiz auch nützlich: @MapsId ordnet im Ruhezustand eine Spalte der Spalte einer anderen Tabelle zu.

Es kann auch verwendet werden, um denselben Primärschlüssel zwischen zwei Tabellen zu teilen.

Beispiel:

@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;
    ...
}
13
Tonsic