有人可以简单地解释一下@PrimaryKeyJoinColumn在Hibernate中的作用吗?我几乎阅读了互联网上的所有参考书,但我的概念仍然不清楚。
我知道的这个注释的一种用法是映射继承策略(每个类具有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_ID和CREDITCARD_ID分别是BANKACCOUNT和CREDITCARD的主键。此外,每个键都是映射到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中的示例。