首页 > 解决方案 > 解释 Hibernate 中的 @PrimaryKeyJoinColumn

问题描述

有人可以简单地解释一下@PrimaryKeyJoinColumn 在 Hibernate 中的作用吗?我几乎阅读了互联网上的所有参考资料,但我的概念仍然不清楚。

标签: hibernateormhibernate-mapping

解决方案


我知道这个注释的一个用途是映射继承策略(每个类的表与 JOIN)。
例子:

如果您有具有继承的域模型:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class BillingDetails {

    @Id
    @GeneratedValue(generator = Constants.ID_GENERATOR)
    protected Long id;

    @NotNull
    protected String owner;
}

@Entity
@PrimaryKeyJoinColumn(name = "CREDITCARD_ID")
public class CreditCard extends BillingDetails {

    @NotNull
    protected String cardNumber;

// other specific fields
}


@Entity
@PrimaryKeyJoinColumn(name = "BANK_ID")
public class BankAccount extends BillingDetails {

    @NotNull
    protected String bankName;

// other specific fields
}

所以你有三张桌子。BANK_IDCREDITCARD_ID分别是BANKACCOUNTCREDITCARD的主键 。此外,每个键都是映射到BILLINGDETAILSID的外键。这允许您进行多态查询。如果你试试这个:

select * from BillingDetails bd;

Hibernate 会做这样的事情:

SELECT BD.ID, BD.OWNER, CC.CARDNUMBER, BA.BANKNAME
 CASE
  WHEN CC.CREDITCARD_ID is not null then 1
  WHEN BA.ID is not null then 2
  WHEN BD.ID is not null then 0
 END
FROM
BILLINGDETAILS BD
left outer join CREDITCARD CC on BD.ID=CC.CREDITCARD_ID
left outer join BANKACCOUNT BA on BD.ID=BA.BANK_ID

这个例子来自本书


推荐阅读