java - 如何将主键也用作 JPA 和 Hibernate 的外键引用?

标签 java hibernate postgresql jpa orm

我想创建一个表,其中 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对于 AddressLocation始终与 @Id 相同来自 Person . 上面的映射将导致 hibernate 生成 3 列。 id, fk_address, fk_location ,其中每一列都具有相同的值(id)。

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

最佳答案

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

关于java - 如何将主键也用作 JPA 和 Hibernate 的外键引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206245/

相关文章:

java - 指定 JBoss HTTP-404 错误页面

java - 将 PostgreSQL Query 转换为对应的 Hibernate Query

postgresql - 转储 postgres 数据库、时间和 .sql 文件权重

postgresql - Postgres 不在 docker 中初始化数据库

java - 为什么 ArrayList 没有 getSize() 而不是 size()?

java - 如何在 jOOQ 中打印异常

hibernate - 如何从 JBoss 7 中的 Hibernate 获取 JDBC 绑定(bind)参数?

hibernate - hibernate.cfg.xml 中的错误

postgresql - 在 PostgreSQL 数据库中分组对象

Java按顺序将数字插入数组