如何使用主键作为JPA和Hibernate的外键引用?

问题描述 投票:3回答:1

我想创建一个表格,其中一个对象的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;
}

问题:@IdAddressLocation总是与@IdPerson相同。上面的映射将导致hibernate生成3列。 id, fk_address, fk_location,其中每列具有相同的值(id)。

问题:是否有可能只为这个人使用primary key @Id,同时告诉hibernate这是更多@ManyToOne外键映射的外键,没有创建这些列?

java hibernate postgresql jpa orm
1个回答
5
投票

假设你在PersonPersonAddressPersonLocation之间有一对一的关联,你需要使用@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;
}
© www.soinside.com 2019 - 2024. All rights reserved.