誰かが私に@MapsIdを休止状態で説明してもらえますか?私はそれを理解するのに苦労しています。
例で説明できれば、どんな用途に最も適しているのでしょうか?
Object DB からのいい説明です。
EmbeddedId主キー、EmbeddedId主キー内の属性、または親エンティティの単純な主キーのマッピングを提供するManyToOneまたはOneToOne関係属性を指定します。 value要素は、関係属性が対応する複合キー内の属性を指定します。エンティティの主キーが、関係によって参照されるエンティティの主キーと同じJavaタイプである場合、value属性は指定されません。
// 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;
}
API Docs こちらをご覧ください。
このメモも便利だと思いました:@MapsId
hibernate注釈では、列を別のテーブルの列にマップします。
また、2つのテーブル間で同じ主キーを共有するためにも使用できます。
例:
@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;
...
}