Hibernate映射类继承之每个类一张表(父子类都有各自的表,并共用一个映射文件)

该博客介绍了Hibernate中每个类都有一张表的映射方式,即子类和超类分别有自己的表,通过外键关联。示例展示了CreditCard和BankAccount子类如何继承BillingDetails超类,并在数据库中分别存储于CREDIT_CARD和BANK_ACCOUNT表,同时共用BILLING_DETAILS表。文章包含配置文件、实体类和映射文件的详细代码示例。
摘要由CSDN通过智能技术生成
这种方案是把继承关系表示为相关的外键关联。声明持久化属性的每个类/子类(包括抽象类甚至接口)都有它自己的表。不同于我们先前例子映射的每个具体类一张表的策略,此处的表仅仅包含了每个非继承的属性(由子类本身声明的每个属性)以及也是超类表的外键的主键的列。
如例CreditCard子类的一个实例变成持久化,由BillingDetails超类声明的属性值就被持久化到BILLING_DETAILS表的一个新行。只有子类声明的属性值被持久化到CREDIT_CARD表的一个新行。这两行通过它们的共享主键值链接在一起。
注意,这里有三个表,BILLING_DETAILS, CREDIT_CARD, BANK_ACCOUNT.

pom.xml:
 
hibernate.cfg.xml:
 
父类, pojo/BillingDetails.java:
 
子类,pojo/BankAccount.java:
 
子类,pojo/CreditCard.java:
 
映射文件,pojo/BillingDetails.hbm.xml:
 
util/HibernateUtil.java:
 
util/Manager.java:
 
输出的sql日志:
 
请注意输出的sql.

上例中,根类BillingDetails被映射到表BILLING_DETAILS。注意这个策略不需要辨别标志。
新的<joined-subclass>元素把子类映射到新的表---在这个例子中为CREDIT_CARD, BANK_ACCOUNT.在被联结的子类中声明的所有属性都被映射到各自的表。CREDIT_CARD, BANK_ACCOUNT表需要主键。这个列也有一个对BILLING_DEAILS表的主键的外键约束。
BILLING_DETAILS表:
BILLING_DETAILS_ID
OWNER
CREDIT_CARD表:
CREDIT_CARD_ID
NUMBER
EXP_MONTH
EXP_YEAR
BANK_ACCOUNT表:
BANK_ACCOUNT_ID
ACCOUNT
BANKNAME
SWIFT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值