如何使用主键作为JPA和Hibernate的外键引用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用主键作为JPA和Hibernate的外键引用?相关的知识,希望对你有一定的参考价值。
我想创建一个表格,其中一个对象的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;
}
以上是关于如何使用主键作为JPA和Hibernate的外键引用?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JPA 中获取外键引用以具有“ON UPDATE CASCADE ON DELETE CASCADE”功能?
hibernate one-to-many 和 many-to-one