我想创建一个表,其中 primary key
一个对象的也应该作为 foreign key
两个@ManyToOne
表格。
如果不创建额外的表列来引用和重复相同的主键 ID,这是否可能?
例子:
@Entity
public class Person {
@Id
private int personId;
@ManyToOne
@JoinColumn(name="fk_address_id", foreignKey=@ForeignKey(name="fk_address"))
private Address address;
@ManyToOne
@JoinColumn(name="fk_location_id", foreignKey=@ForeignKey(name="fk_location"))
private Location location;
}
问题:@Id
对于 Address
和 Location
始终与 @Id
相同来自 Person
.
上面的映射将导致 hibernate 生成 3 列。 id, fk_address, fk_location
,其中每一列都具有相同的值(id)。
问题:是否可以只使用 primary key
@Id 给这个人,同时告诉hibernate这是更多@ManyToOne
的外键没有创建这些列的外键映射?
最佳答案
假设您在 Person
、PersonAddress
和 PersonLocation
之间存在一对一关联,您需要使用 @ MapsId
JPA 注解因为it is the best way to map a one-to-one table relationship .
我添加了一个示例 on GitHub为了这。基本上,您可以像这样映射这些关联:
@Entity(name = "Person")
public class Person {
@Id
private Long personId;
@OneToOne
@MapsId
@JoinColumn(name = "personId")
private PersonAddress address;
@OneToOne
@MapsId
@JoinColumn(name = "personId")
private PersonLocation location;
}
关于java - 如何将主键也用作 JPA 和 Hibernate 的外键引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206245/