我有两个实体:
第一个实体:
@Entity
@Table(name = "first")
public class First {
@Id
private Long id;
// other properties
// getters & setters
}
第二实体:
@Entity
@Table(name = "second")
public class Second {
@OneToOne
@JoinColumn(name = "first_id")
private First first;
// other properties
// getters & setters
}
我想在第二个实体中创建第一个字段将是主键。
First first = new First()
repository.save(first);
(first.id = 1)必须
Second second = new Second()
second.setFirst(first); // as primary key
repository.save(second);
(second.first = first)必须是
答案 0 :(得分:0)
使用@MapsId
并将@Id
字段添加到第二个实体:
@Entity
@Table(name = "second")
public class Second {
@Id
private Long Id;
@MapsId
@OneToOne
@JoinColumn(name = "first_id")
private First first;
// other properties
// getters & setters
}
请参阅JPA 2 spec的第37页:
情况(b):从属实体具有与该关系相对应的单个主键属性 属性。主键属性与父实体的主键具有相同的基本类型。的 应用于关系属性的MapsId批注指示主键已由 关系属性。
@Entity public class MedicalHistory { @Id String id; // overriding not allowed ... // default join column name is overridden @MapsId @JoinColumn(name="FK") @OneToOne Person patient; ... }