hibernate - 解释 Hibernate 中的 @PrimaryKeyJoinColumn
问题描述
有人可以简单地解释一下@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
这个例子来自本书。
推荐阅读
- mysql - 如何限制最大计数
- django - 如何在Django中将pdf文件作为附件发送
- python - 如何使用 pandas 读取日志文件?
- django - 测试表单字段小部件类型
- ios - iOS web 视图删除历史记录
- azure-eventgrid - 无法在 azure 门户中查看 eventgrid 订阅。也无法创建新的
- node.js - 反应 NodeJS 开发工作流程
- wordpress - Wordpress Bootstrap Navwalker 让我发疯
- sql-server - 使用 sql 查询或 sp 在存储过程中查找特定的 ResultSet
- javascript - Javascript:如何从输出中选择特定部分