Hibernate实体对象继承的方法

hibernate继承策略总共有三种,一种是共用一张表;一种是每个类一张表,表里面储存子类的信息和父类的信息;还有一种是通过表连接的方式,每个类都有一张表,但是子类对应的表只保存自己的信息,父类对应的表保存父类的信息,它们之间通过子类表和父类表的关联来获取所有的信息。
第一种方式,即共用一张表:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="discriminator", discriminatorType=DiscriminatorType.STRING)//表示区分不同的对象的字段名
@DiscriminatorValue("person")//用来表示该对象是何种对象的,即区分器
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
@DiscriminatorValue("child1")
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
@Entity
@DiscriminatorValue("child2")
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
这种情况父类和所有子类的所有信息都保存在同一张表里面,通过我们指定的@DiscriminatorColumn对应的@DiscriminatorValue来区别不同的类。 当没有指定@DiscriminatorValue的时候将使用全类名来作为DiscriminatorValue。
第二种策略是每个类一张表,保存所有信息:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@TableGenerator( //一个类一张表,最重要的是要保证它们的id由一个生成器产生,@TableGenerator就是为了控制这个的
name="t_gen",
table="t_gen_table",
pkColumnName="t_pk",
valueColumnName="t_value",
pkColumnValue="person_pk",
initialValue=1,
allocationSize=1
)
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue(generator="t_gen", strategy=GenerationType.TABLE)//这个就是用表生成器生成的,用同一个生成器就可以控制它们的id不重复
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
弟三种方式是采用表连接的方式:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Parent {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
public class Child2 extends Parent {
private String address;
public String getAddress() {
return score;
}
public void setAddress(String address) {
this.address = address;
}
}
@Entity
public class Child1 extends Parent {
private String email;
public String getEmail() {
return title;
}
public void setEmail(String email) {
this.email = email;
}
}
采用表连接的情况,还是每个类拥有自己的一张表,只是子类对应的表只保存子类的信息,其父类的信息由父类的表保存。当需要获取子类的完整信息时通过表连接的方式连接子类的表和父类的表获取对应信息。可以在子类的表上标注@PrimaryKeyJoinColumn(name="foreignKeyName")指明子类表相对于父类表外键的名称。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Hibernate实体对象继承的三种方法
# Hibernate
# 对象继承
# 基于spring boot 1.5.4 集成 jpa+hibernate+jdbcTemplate(
# 基于Hibernate中配置文件的学习(分享)
# 详解 hibernate mapping配置
# Spring Boot + Jpa(Hibernate) 架构基本配置详解
# java中hibernate二级缓存详解
# Hibernate对数据库删除、查找、更新操作实例代码
# 深入理解hibernate的三种状态
# 详解hibernate自动创建表的配置
# 子类
# 自己的
# 三种
# 都有
# 希望能
# 这种情况
# 谢谢大家
# 相对于
# 最重要的是
# 第二种
# 第一种
# 总共有
# 就可以
# 其父
# 表上
# 字段名
# 在同一
# DiscriminatorType
相关文章:
兔展官网 在线制作,怎样制作微信请帖?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何破解联通资金短缺导致的基站建设难题?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何选择CMS系统实现快速建站与SEO优化?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
IOS倒计时设置UIButton标题title的抖动问题
威客平台建站流程解析:高效搭建教程与设计优化方案
如何确保FTP站点访问权限与数据传输安全?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
如何用AWS免费套餐快速搭建高效网站?
建站主机功能解析:服务器选择与快速搭建指南
建站之星CMS五站合一模板配置与SEO优化指南
建站之星如何开启自定义404页面避免用户流失?
如何用腾讯建站主机快速创建免费网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
手机网站制作与建设方案,手机网站如何建设?
如何用低价快速搭建高质量网站?
如何获取PHP WAP自助建站系统源码?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何在云主机上快速搭建多站点网站?
建站OpenVZ教程与优化策略:配置指南与性能提升
建站主机选哪家性价比最高?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
北京专业网站制作设计师招聘,北京白云观官方网站?
香港服务器部署网站为何提示未备案?
如何快速搭建高效可靠的建站解决方案?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
宁波免费建站如何选择可靠模板与平台?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
实惠建站价格推荐:2025年高性价比自助建站套餐解析
建站主机是什么?如何选择适合的建站主机?
孙琪峥织梦建站教程如何优化数据库安全?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
如何选择域名并搭建高效网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
宝塔建站助手安装配置与建站模板使用全流程解析
公司网站设计制作厂家,怎么创建自己的一个网站?
高防服务器租用指南:配置选择与快速部署攻略
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何做网站制作流程,*游戏网站怎么搭建?
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站之星如何实现网站加密操作?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何快速搭建个人网站并优化SEO?
如何用VPS主机快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。