【hibernate】映射继承关系
【hibernate】映射继承关系
转载:https://www.cnblogs.com/yangchongxing/p/10405151.html
===========================================
1、每个带有隐式多态的具体类使用一个表
2、每个带有联合的具体类使用一个表
3、每个类层次结构使用一个表
4、每个带有联结的子类使用一个表
===========================================
1、每个带有隐式多态的具体类使用一个表
@MappedSuperclass 超类的属性被忽略不会被持久化
package cn.ycx.study.hibernate.entity;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public abstract class BillingDetails {
protected String owner;
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
}
子类
package cn.ycx.study.hibernate.entity; import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class CreditCard extends BillingDetails {
@Id
@GeneratedValue(generator="id_generator")
protected Long id;
protected String cardNumber;
protected String expMonth;
protected String expYear;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getExpMonth() {
return expMonth;
}
public void setExpMonth(String expMonth) {
this.expMonth = expMonth;
}
public String getExpYear() {
return expYear;
}
public void setExpYear(String expYear) {
this.expYear = expYear;
}
}
子类
package cn.ycx.study.hibernate.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class BankAccount extends BillingDetails {
@Id
@GeneratedValue(generator="id_generator")
protected Long id;
protected String account;
protected String bankname;
protected String swift;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getBankname() {
return bankname;
}
public void setBankname(String bankname) {
this.bankname = bankname;
}
public String getSwift() {
return swift;
}
public void setSwift(String swift) {
this.swift = swift;
}
}
生成的 SQL 表结构
CREATE TABLE `creditcard` (
`id` BIGINT(20) NOT NULL,
`owner` VARCHAR(255) NULL DEFAULT NULL,
`cardNumber` VARCHAR(255) NULL DEFAULT NULL,
`expMonth` VARCHAR(255) NULL DEFAULT NULL,
`expYear` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
; CREATE TABLE `bankaccount` (
`id` BIGINT(20) NOT NULL,
`owner` VARCHAR(255) NULL DEFAULT NULL,
`account` VARCHAR(255) NULL DEFAULT NULL,
`bankname` VARCHAR(255) NULL DEFAULT NULL,
`swift` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
2、每个带有联合的具体类使用一个表
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) 策略
package cn.ycx.study.hibernate.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class BillingDetails {
@Id
@GeneratedValue(generator="id_generator")
protected Long id;
protected String owner;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
}
子类
package cn.ycx.study.hibernate.entity; import javax.persistence.Entity;
@Entity
public class CreditCard extends BillingDetails {
protected String cardNumber;
protected String expMonth;
protected String expYear;
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getExpMonth() {
return expMonth;
}
public void setExpMonth(String expMonth) {
this.expMonth = expMonth;
}
public String getExpYear() {
return expYear;
}
public void setExpYear(String expYear) {
this.expYear = expYear;
}
}
子类
package cn.ycx.study.hibernate.entity;
import javax.persistence.Entity;
@Entity
public class BankAccount extends BillingDetails {
protected String account;
protected String bankname;
protected String swift;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getBankname() {
return bankname;
}
public void setBankname(String bankname) {
this.bankname = bankname;
}
public String getSwift() {
return swift;
}
public void setSwift(String swift) {
this.swift = swift;
}
}
生成的 SQL 表结构
CREATE TABLE `bankaccount` (
`id` BIGINT(20) NOT NULL,
`owner` VARCHAR(255) NULL DEFAULT NULL,
`account` VARCHAR(255) NULL DEFAULT NULL,
`bankname` VARCHAR(255) NULL DEFAULT NULL,
`swift` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
; CREATE TABLE `creditcard` (
`id` BIGINT(20) NOT NULL,
`owner` VARCHAR(255) NULL DEFAULT NULL,
`cardNumber` VARCHAR(255) NULL DEFAULT NULL,
`expMonth` VARCHAR(255) NULL DEFAULT NULL,
`expYear` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
3、每个类层次结构使用一个表
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 策略
@DiscriminatorColumn(name="bd_type") 指定识别器列名,不指定默认时 DTYPE。
@DiscriminatorValue("CC") 指定识别器值,每种一个,
package cn.ycx.study.hibernate.entity;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="bd_type")
public abstract class BillingDetails {
@Id
@GeneratedValue(generator="id_generator")
protected Long id;
protected String owner;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
}
子类,识别器值 @DiscriminatorValue("CC")
package cn.ycx.study.hibernate.entity; import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("CC")
public class CreditCard extends BillingDetails {
protected String cardNumber;
protected String expMonth;
protected String expYear;
public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getExpMonth() {
return expMonth;
}
public void setExpMonth(String expMonth) {
this.expMonth = expMonth;
}
public String getExpYear() {
return expYear;
}
public void setExpYear(String expYear) {
this.expYear = expYear;
}
}
子类,识别器值 @DiscriminatorValue("BA")
package cn.ycx.study.hibernate.entity;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
@Entity
@DiscriminatorValue("BA")
public class BankAccount extends BillingDetails {
protected String account;
protected String bankname;
protected String swift;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getBankname() {
return bankname;
}
public void setBankname(String bankname) {
this.bankname = bankname;
}
public String getSwift() {
return swift;
}
public void setSwift(String swift) {
this.swift = swift;
}
}
生成的 SQL 表结构
CREATE TABLE `billingdetails` (
`bd_type` VARCHAR(31) NOT NULL,
`id` BIGINT(20) NOT NULL,
`owner` VARCHAR(255) NULL DEFAULT NULL,
`cardNumber` VARCHAR(255) NULL DEFAULT NULL,
`expMonth` VARCHAR(255) NULL DEFAULT NULL,
`expYear` VARCHAR(255) NULL DEFAULT NULL,
`account` VARCHAR(255) NULL DEFAULT NULL,
`bankname` VARCHAR(255) NULL DEFAULT NULL,
`swift` VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;
4、每个带有联结的子类使用一个表
@Inheritance(strategy=InheritanceType.JOINED) 联结
@PrimaryKeyJoinColumn(name = "ba_id") 可以不指定,它会自动继承父类主键。
package cn.ycx.study.hibernate.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class BillingDetails {
@Id
@GeneratedValue(generator="id_generator")
protected Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
} protected String owner;
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
}
子类
package cn.ycx.study.hibernate.entity; import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
@PrimaryKeyJoinColumn(name = "cc_id")
public class CreditCard extends BillingDetails {
protected String cardNumber;
protected String expMonth;
protected String expYear; public String getCardNumber() {
return cardNumber;
}
public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
}
public String getExpMonth() {
return expMonth;
}
public void setExpMonth(String expMonth) {
this.expMonth = expMonth;
}
public String getExpYear() {
return expYear;
}
public void setExpYear(String expYear) {
this.expYear = expYear;
}
}
子类
package cn.ycx.study.hibernate.entity;
import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;
@Entity
@PrimaryKeyJoinColumn(name = "ba_id")
public class BankAccount extends BillingDetails {
protected String account;
protected String bankname;
protected String swift;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getBankname() {
return bankname;
}
public void setBankname(String bankname) {
this.bankname = bankname;
}
public String getSwift() {
return swift;
}
public void setSwift(String swift) {
this.swift = swift;
}
}
【hibernate】映射继承关系的更多相关文章
- [原创]java WEB学习笔记87:Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate学习之路-- -映射 继承关系(subclass , joined-subclass,union-subclass )
1.继承映射 举例:对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate 的继承映射可以理解持久化类之间的继承关系.例如:人和学生之间的关系.学生继承了人,可以认为学生是一 ...
- Hibernate(十一):映射继承关系的三种方案
背景: 在一些项目中,会采用集成的关系来定义数据库实体类,比如:人(Person)与学生(Student),学生来源与人,所以人的基本属性学生也拥有:但学生有的一些属性,人就不具有.人与学生之间很显然 ...
- 【SSH系列】Hibernate映射 -- 继承映射
开篇前言 在前面的博文中,小编介绍了hibernate中的映射,一对一,一对多,多对多,单向,双向等,今天这篇博文,小编主要来介绍一下hibernate中的继承映射,小伙伴都知道在C#中,如果想要实现 ...
- Hebernate -- 映射继承关系
1. Employee 为基类, 派生出HourEmployee 和 SalaryEmployee两个类. 采用 subclass 元素的继承映射(1) 采用 subclass 的继承映射可以实现对于 ...
- hibernate映射-继承映射
对于面向对象的程序设计语言而言,继承和多态是两个最基本的概念.Hibernate的继承映射可以理解成持久化类之间的继承关系.例如:人和学生之间的关系.学生继承人,可以认为学生是一个特殊的人,如果对人进 ...
- Entity Framework Code First 映射继承关系
转载 http://www.th7.cn/Program/net/201301/122153.shtml Code First如何处理类之间的继承关系.Entity Framework Code Fi ...
- hibernate 映射组成关系
建立域模型和关系数据模型有着不同的出发点: 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程 在没有数据冗余的情况下, 应该尽可能降低表的数目, 简化表之间的參照关 ...
- Hibernate逍遥游记-第10章 映射继承关系-003继承关系树中的每个类对应一个表(joined-subclass)
1. 2. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate ...
随机推荐
- 关于手机微信端ios的input不能选中问题解决方案
最近在做一个微信端的商城,以前做web端的比较多,手机端做的相对来说要少点,老板说让我用俗称”靠谱的移动前端框架”—-AUI来搭建项目. 当时觉得用不用框架无所谓啦.结果后来写到一半把项目发布到手机上 ...
- Rust 入门 (一)
Rust 语言的介绍.特性什么的都不说了,如有需要,请自行了解.这里我们直接进去正题. 一.开发环境 mac或linux系统,在命令行安装 curl https://sh.rustup.rs -sSf ...
- PostGIS 用Navicat工具添加自增
1.新建查询,新增序列(从66开始,每次自增1): CREATE SEQUENCE seq_area INCREMENT 1 MINVALUE 66 MAXVALUE 999999999 START ...
- Python中lambda的使用,与它的三个好基友介绍!
匿名函数lambda 除了def语句,python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具类似,所以称为lambda. 就像def一样,这个表达式创建了一个之后能够调用的 ...
- 2019-9-16:渗透测试,基础学习,Linux下软件安装,环境搭建,笔记
Centos linux下软件安装yum 通过分析rpm包头数据后,自动解决依赖关系,直接云端下载软件,根据不同版本系统获取不同软件信息,按顺序下载rpm包,安装软件yum search 软件名:搜索 ...
- 和SharpDX坑爹的Variant刚正面
和SharpDX坑爹的Variant刚正面 几个月前我写了和篇文章<.NET中生成动态验证码>文章,其实里面藏着一个大坑.运行里面的代码,会发现运行的gif图片并没有循环播放: 细心的网友 ...
- [ASP.NET Core 3框架揭秘] 异步线程无法使用IServiceProvider?
标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题.这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期. 一.问题重现 我们通过一个简单的实 ...
- Linux下用Docker部署接口安全的运行环境
背景:MySQL数据库运行在宿主机上(Linux) 需求:Redis.服务.页面分别运行在独立的docker中,并处于同一网络,容器内部重要目录要挂载在物理目录,保证数据安全 方法: 一.设置网络环境 ...
- 如何优雅地在Stack Overflow提问?
今天来给大家聊一聊 Stack Overflow,Stack Overflow 是什么呢? 什么是 Stack Overflow? Stack Overflow 是一个全球最大的技术问答网站,作为一个 ...
- 对照谈-官方spring-boot-starter和自定义starter异同分析
在前面我讲用spring-boot-starter-mail发邮件的时候,我侧重看的是spring boot发邮件的便利性,今天,我们聊下另外一个方面,spring-boot-starter自身的结构 ...