Java 如何在JPA和Hibernate中将主键也用作外键引用?
我想创建一个表,其中一个对象的Java 如何在JPA和Hibernate中将主键也用作外键引用?,java,hibernate,postgresql,jpa,orm,Java,Hibernate,Postgresql,Jpa,Orm,我想创建一个表,其中一个对象的主键也应该作为两个@ManyToOne表的外键 如果不创建引用和重复同一主键id的额外表列,这是可能的吗 例如: @Entity public class Person { @Id private int personId; @ManyToOne @JoinColumn(name="fk_address_id", foreignKey=@ForeignKey(name="fk_address")) private Addre
主键
也应该作为两个@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
始终与个人
的@Id
相同。
上面的映射将导致hibernate生成3列<代码>id,fk_地址,fk_位置
,其中每列具有相同的值(id)
问题:是否可以只为person设置
主键
@Id,同时告诉hibernate这是一些@manytone
外键映射的外键,而不创建这些列?假设person
之间存在一对一关联,PersonAddress
和PersonLocation
,您需要使用@MapsId
JPA注释,因为
我为此添加了一个示例。基本上,您可以这样映射这些关联:
@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;
}
看看这篇文章。