说明JPA术语“所有者”

时间:2019-11-25 14:34:05

标签: database jpa

给出以下JPA模型:

@Entity
public class Customer {
    @Id    
    private long id;

    @OneToOne(mappedBy="customer")
    private ShippingAddress shippingAddress;

    //...
}

@Entity
public class ShippingAddress {
    @Id    
    private long id;

    @OneToOne
    private Customer customer;

    //...
}

这将为customer表中的shipping_address表(即shipping_address.customer_id)创建一个外键。

从数据库的角度来看,可以说客户是父表,而shipping_address是子表,因为

  • 没有客户就不能存在地址
  • 如果删除客户,则还必须删除其地址

但是,根据JPA,此关系的所有者为ShippingAddress,因为mappedBy的JavaDoc声明

  

此元素仅在关联的反(非所有权)侧指定。

我感到非常困惑,根据JPA,关系的所有者(从数据库的角度来看)将被视为子表。有没有办法调和这种明显的矛盾?

1 个答案:

答案 0 :(得分:0)

简而言之:正如在herehere之前发布的那样,该关系的拥有方是将FK保留在数据库表中的那一方。

您可以阅读此excellent answer,了解原因的完整说明。