Qualcuno può spiegarmi @MapsId in ibernazione? Ho difficoltà a capirlo.qualcuno può spiegarmi @MapsId in ibernazione?
Sarebbe bello se uno potesse spiegarlo con un esempio e in che tipo di casi d'uso è più applicabile?
Qualcuno può spiegarmi @MapsId in ibernazione? Ho difficoltà a capirlo.qualcuno può spiegarmi @MapsId in ibernazione?
Sarebbe bello se uno potesse spiegarlo con un esempio e in che tipo di casi d'uso è più applicabile?
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.
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;
...
}