【问题标题】:How to use a Primary Key also as a Foreign Key reference with JPA and Hibernate?如何将主键也用作 JPA 和 Hibernate 的外键引用?
【发布时间】:2016-03-16 08:17:37
【问题描述】:

我想创建一个表,其中一个对象的primary key 也应作为两个@ManyToOne 表的foreign key

如果不创建额外的表列来引用和重复相同的主键 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;
}

问题:AddressLocation@Id 始终与 Person@Id 相同。 上面的映射将导致休眠生成 3 列。 id, fk_address, fk_location,其中每一列都有相同的值(id)。

问题:是否可以只为该人提供primary key @Id,同时告诉hibernate 这是更多@ManyToOne 外键映射的外键,而不创建这些列?

【问题讨论】:

  • 看看this的帖子。

标签: java hibernate postgresql jpa orm


【解决方案1】:

假设您在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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 2015-02-03
    • 2015-03-08
    • 2023-03-26
    • 1970-01-01
    • 2018-02-02
    • 2011-02-18
    • 2022-11-21
    相关资源
    最近更新 更多