在休眠状态下解释@PrimaryKeyJoinColumn

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

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

hibernate orm hibernate-mapping
1个回答
0
投票

我知道的这个注释的一种用法是映射继承策略(每个类具有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的主键。此外,每个键都是映射到BILLINGDETAILS表的ID的外键。这使您可以进行多态查询。如果您尝试这样做:

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

book中的示例。

© www.soinside.com 2019 - 2024. All rights reserved.