有人可以解释一下我在冬眠@MapsId吗?
2022-08-31 09:35:44
有人可以在冬眠中向我解释吗?我很难理解它。@MapsId
如果可以用一个例子来解释它,那就太好了,在什么样的用例中它最适用?
有人可以在冬眠中向我解释吗?我很难理解它。@MapsId
如果可以用一个例子来解释它,那就太好了,在什么样的用例中它最适用?
这是来自Object DB的一个很好的解释。
指定一个 ManyToOne 或 OneToOne 关系属性,该属性为 EmbeddedId 主键、EmbeddedId 主键中的属性或父实体的简单主键提供映射。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 文档。
我发现这个注释也很有用:在休眠注释中,将一列与另一个表的列进行映射。@MapsId
它还可用于在 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;
...
}