首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

初识Hibernate继承映射

例如: 如图,student和teacher共同具有id,name,age等字段,而我们继承映射就是这样一个思想,抽象出这些共有的字段为一张父,让子表对其进行继承,这样就可以大大降低我们实体代码冗余性...Hibernate支持以下三种数据生成策略: 每个分层结构一张 每个子类一张 每个具体一张 一、每个分层结构一张      对于这种数据生成策略,最终Hibernate会在数据库中生成一张数据..., newTable是一张综合,主要由student和teacher集成而来,对应于student记录salary字段,对应于teacher表记录grade字段。...二、每个具体映射成一张      这种数据生成策略会为每个实体生成一张数据,就上述例子而言,会为person,student,teacher都生成一张。...joined-subclass来配置继承子类,在Hibernate生成数据时候会将student和teacher主键作为外键关联父主键。

77580
您找到你想要的搜索结果了吗?
是的
没有找到

Java EE实用教程笔记----(8)第八章 Hibernate映射机制

第二部分 数据类型映射 在Hibernate映射文件中,用标签来说明POJO属性与数据库哪一个字段对应,用type属性说明对应属性应该使用什么数据类型。...在实际应用中,存在这样一种情况:有很多种学生,如研究生、本科生等,它们都有学生基本属性,但又有各自特殊属性,故适合使用继承来实现这样对象模型。 例如,学生POJOXs.java代码为: ?...现在就要考虑继承关系在数据库中建问题了,这种情况可以有3中方法来设计数据库: 1.每个子类一个数据 2.每个一个数据 3.共享一个数据库每个子类一个数据 设计两张数据库,分别是yjs...二 每个一个数据 【实例8.1】采用“每个一个数据方式,实现继承关系映射。 创建Java项目,命名为“Inheritance_mapping”。...第四部分 动态使用 前面的例子都是使用Java代码POJO作为对象模型,其实Hibernate还支持在XML文件中直接表示持久化数据,这样好处是便于开发人员对程序维护。 ? ? ? ?

1K20

springboot实战之ORM整合(JPA篇)

如果不是此方面的需求建议取值设为none 可选参数 create 启动删数据库中,然后创建,退出不删除数据 create-drop 启动删数据库中,然后创建,退出删除数据,如果不存在报错...@Table 声明名 @Id 指定属性,用于识别(一个主键)。...@MappedSupperclass 用来申明一个超继承这个子类映射要映射此类中字段 @CreationTimestamp 数据库做插入时,自动填充时间 @UpdateTimestamp...数据库有更新,自动更新时间 本例只用一个entity来演示,因此没有涉及到关联,常用之间关联注解如下 @JoinColumn 指定一个实体组织或实体集合。...即如果要更新bean中字段,存在null,原生SimpleJpaRepository进行更新操作,会把null值更新进数据库,而有时候业务上我们不需要这样,因此可以重写SimpleJpaRepository

5.7K20

【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张

”,之间有继承关系,Hibernate中也对这种继承关系提供了映射封装。   ...Hibernate继承映射提供了三种策略   1、每棵继承使用一张   2、每个子类使用一张   3、每个具体使用一张   本文对第一种策略进行说明。...上图中Pig和Bird继承Animal,每棵继承树对应一张,即在同一棵继承树中,所有的对象信息(记录)共同存放到一张中,要判断某条记录属于哪个对象,需要在中添加一个字段进行区分(比如下表...插入父(Animal),默认把名当做type了 查询测试 ---- load查询   根据配置,鉴别type)在存储时候会自动存储,在加载时候也会根据鉴别映射取得相应对象。...,但是粒度比较粗,有冗余字段;但又是因为多个相关记录都存放在一张中,查询不用关联,因此效率较高。

37620

Hibernate【映射】续篇

组件映射 Java主要主要有两种方式 组合关系,组合关系对应就是组件映射 继承关系,继承关系对应就是继承映射 组件映射实际上就是将组合关系数据映射成一张,组件和被包含组件映射成一张...这里写图片描述 ---- 每个映射一张(3张) 父和子类都各对应一张。...这里写图片描述 ---- (推荐)每个子类映射一张, 父不对应(2张) 使用过了一张保存所有子类数据,这不符合数据库设计规范 每个子类、父都拥有一张..结构太过于繁琐..添加信息,过多...SQL 我们即将使用是:每个子类映射成一张,父不对应…这和我们传统方式继承是一样。...结构太过繁琐 插入数据要生成SQL至少就要两条 子类拥有自己、父不对应【推荐】union-subclass 父不对应使用abstract来修饰 主键id不能使用自增长策略,修改成

74860

Hibernate继承映射

对象模型示例: 继承映射实现方式有以下三种: (一)每棵继承树一张 (二)每个一张 (三)每个子类一张 (一)每棵继承树一张 关系模型如下: 映射文件如下: 说明: 因为继承树肯定是对应多个,要把多个信息存放在一张中,必须有某种机制来区分哪些记录是属于哪个。...关于鉴别在存储时候hibernate会自动存储,在加载时候会根据鉴别取得相关对象 (二)每个一张 关系模型如下: 映射文件如下: <hibernate-mapping package="com.nnngu...父、子类,每个都对应一张数据库。 在父对应数据库中,实际上会存储所有的记录,包括父和子类记录;在子类对应数据库中,这个只定义了子类中所特有的属性映射字段。...每个子类对应一张,而且这个信息是完备,即包含了所有从父继承下来属性映射字段(这就是它跟joined-subclass不同之处,joined-subclass定义子类,只包含子类特有属性映射字段

97040

一篇 SpringData+JPA 总结

包下新建接口,继承 Repository 或其子接口 在该步骤之前我们先需要编写实体,如我们声明接口中 Person ,其所需配置和注解同时也可以参看以前博文(一篇 JPA 总结)。...在 maven 项目的 test 目录下新建测试测试 getPersonByPersonName(String personName) 方法(自动生成数据中已加入数据,Person 和 Address...Repository 子接口 Repository: 仅仅是一个标识,表明任何继承均为仓库接口 CrudRepository: 继承 Repository,实现了一组 CRUD 相关方法 PagingAndSortingRepository...注意:默认情况下,SpringData 每个方法上都有事务,但都是一个只读事务,他们不能完成修改操作 ?...举例(查找某所有的内容,使用 CURDRepository 可以快速实现) 实现 CURDRepository 接口 ? 使用 findall() 方法 ?

1.4K30

Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

该参数几种配置如下: create:每次加载hibernate都会删除上一次生成,然后根据你model再重新来生成新,哪怕两次没有任何改变也要这样执行,这就是导致数据库数据丢失一个重要原因...create-drop:每次加载hibernate根据model生成,但是sessionFactory一关闭,就自动删除。...update:最常用属性,第一次加载hibernate根据model会自动建立起结构(前提是先建立好数据库),以后加载hibernate根据model自动更新结构,即使结构改变了但行仍然存在不会删除以前行...validate:每次加载hibernate,验证创建数据库结构,只会和数据库中进行比较,不会创建新,但是会插入新。...JpaRepository需要传入两个参数,一个是实体User一个是主键类型Long,而凡是继承了JpaRepository就会自动实现很多内置方法,包括增删改查,以及使用默认支持Pageable

1.4K10

Hibernate映射继承关系

Hibernate中,继承关系映射可以使用三种方式,分别是单继承、多表继承和一对一继承。...在Hibernate中,继承关系映射方式主要有三种,分别是单继承、多表继承和一对一继承。单继承在单继承中,继承关系子类和父使用同一个。...子类和父有共同属性,而子类定义新属性,则沿用父属性,使用null来填充该属性。在映射到数据库使用一个自增长id来区分子类和父实体。...一对一继承一对一继承是指每个实体映射到一个中,同时每个之间具有一对一关系映射。在这种情形中,父子之间并不会共享某些字段,因此,嵌套不是必须。...二、单继承映射示例在本文中,我们将从单继承开始,展示如何使用Hibernate实现继承关系映射。下面是两个Java,我们将使用这两个来演示单继承映射。

48530

加速你Hibernate引擎(上) 转

4.2继承映射调优 尽管继承映射是领域对象一部分,出于它重要性我们将它单独出来。HRD [1]中第9章“继承映射”已经说得很清楚了,所以我们将关注SQL生成和针对每个策略调优建议。...; 优点包括数据比较紧凑(没有不需要字段),数据跨三个子类进行分区,容易使用与其他进行关联。...4.2.4使用隐式多态实现每个具体一张 只需要三张。对于Payment多态查询生成三条独立SQL语句,每个对应一个子类。...开始,项目只有GasDeal和少数用户,它使用每个层次一张”。 OilDeal和ElectricityDeal是后期产生更多业务需求后加入。没有改变映射策略。...重新设计时我们使用了两张单独,分别针对气/油和电相关属性。新映射混合了“每个层次一张”和“每个子类一张”。

59830

hibernate笔记(三)

lazy true 使用懒加载 false 关闭懒加载 extra (在集合数据懒加载时候提升效率),在真正使用数据时候才向数据库发送查询sql;如果调用集合size()/isEmpty...继承映射 需求:猫、猴子、动物。 所有子类映射到一张 (1张) 什么情况用? 子类教多,且子类较为简单,即只有个别属性! 好处:因为使用一个映射文件, 减少了映射文件个数。...每个映射一张(3张) 数据库 T_anmal (存储父信息) 1 大花猫 T_cat (引用父主键) 1 抓小老鼠 T_monkey(引用父主键) Javabean...-- 继承映射, 每个对应一张(父也对应) --> <class name="Animal...总结: 所有的子类都写到一个映射文件; 父<em>类</em>不对应<em>表</em>; <em>每个</em>子类对应一张<em>表</em> <em>Hibernate</em>中映射: 多对一 一对多 多对多 一对一 (多对一<em>的</em>特殊应用) 组件 <em>继承</em>

58740

SpringDataJPA 系列之 JPA 简介

,当从数据库 SELECT ,自动把字段塞进 JavaBean 对应属性里,当做 INSERT 或 UPDATE ,自动把 JavaBean 属性绑定到 SQL 语句中。...☞ 高级特性   JPA 中能够支持面向对象高级特性,如之间继承、多态和之间复杂关系,这样支持能够让开发者最大限度使用面向对象模型设计企业应用,而不需要自行处理这些特性在关系数据库持久化...答案是否定,也就是说,如果使用 JPA 规范进行数据库操作,底层需要 hibernate 作为其实现完成数据持久化工作。 ?...♞ validate:加载 hibernate ,验证创建数据库结构;  ♞ create:每次加载 hibernate,重新创建数据库结构;  ♞ create-drop:加载 hibernate...创建,退出是删除结构;  ♞ update: 加载 hibernate 自动更新数据库结构。

4.3K20

【SSH快速进阶】——Hibernate继承映射:每个具体映射一张

与上篇文章不同是,这里是每个“具体”映射一张,什么意思呢?就是让每个子类(具体、有意义)映射一张。 场景 ----   与上篇文章场景一样,如下图 ?   ...父还用标签来定义即可;用标签定义两个子类,且每个对应信息是完全,包含了所有从父继承下来属性。...《【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张》中测试一致。   ...如果追求细粒度设计且子类数量不多,则可以用后两种方案:每个映射一张每个具体映射一张。...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每个具体映射一张》】

42640

【SSH快速进阶】——Hibernate继承映射:每个映射一张

https://blog.csdn.net/huyuyang6688/article/details/50689003   上文说了每棵继承树映射一张,本文继续描述让每个都映射一张配置...上图中Pig和Bird继承Animal,要让每个映射一张,就是让着三个都分别映射一张,但同时这三张也跟对应三个类似的,有继承关系,在父对应中,实际上会存储所有子类对应记录,如下表所示...所以对对象操作同上篇文章《【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张》中测试一致。...总结 ----   缺点:查询需要关联,效率差;插入时也要执行多个insert语句,适合继承程度不深情况。   优点:粒度较细,调理清楚,没有冗余。   ...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每个映射一张》】

38830

day29_Hibernate学习笔记_01

该代理与被代理对象之间关系是继承关系,与我们学动态代理不是一种。所以不需要接口。...create-drop(极少):无论是否存在结构。每次启动Hibernate都会重新创建结构,每次Hibernate运行结束,删除结构。              ...基本类型无法表达null、数字类型默认为0。 包装默认是null。当对于默认有业务意义时候需要使用包装。..."   中列数据长度             type=""     类型             unsaved-value   (不常用)指定主键是什么,才当做null来处理         ...7.assigned  自己指定主键值,当主键是自然主键使用                     7策略是自然主键,由程序自己维护。

1.1K20

芋道 Spring Boot JPA 入门(一)之快速入门

create :每次加载 hibernate 都会删除上一次生成,然后根据你 model 再重新来生成新,哪怕两次没有任何改变也要这样执行,这就是导致数据库数据丢失一个重要原因。...create-drop :每次加载 hibernate 根据 model 生成,但是 sessionFactory 一关闭,就自动删除。...update :最常用属性,第一次加载 hibernate 根据 model 会自动建立起结构(前提是先建立好数据库),以后加载 hibernate 根据 model 自动更新结构,即使结构改变了但行仍然存在不会删除以前行...validate :每次加载 hibernate ,验证创建数据库结构,只会和数据库中进行比较,不会创建新,但是会插入新。...2.6 简单测试 创建 UserRepository01Test 测试,我们来测试一下简单 UserRepository01 每个操作。

1.5K20

java基础知识

- 停止执行 6.7 ThreadLocal相关 ThreadLocal解决了变量并发访问冲突问题 当使用ThreadLocal维护变量,ThreadLocal为每个使用该变量线程提供独立变量副本...这一思想表现为对继承机制约束规范,只有子类能够替换其基,才能够保证系统在运行期内识别子类,这是保证继承复用基础。...;若它右子树不,则右子树上所有结点均大于它根结点;它左、右子树也分别为二叉搜索树。...优点:无堆积 事先无需确定长 删除结点易于实现 装载因子a>=1,缺点:需要额外空间 27.枚举 JDK1.5出现 每个枚举都需要调用一次构造函数 28.数组复制方法 for逐一复制 System.arraycopy...局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大开销,但变量不初始化为默认使用是不安全

1K50

spring.jpa.hibernate 配置和源码解析

不操作 create-only 当使用嵌入式数据库且没有模式管理器,此项为默认。...配置:指定实现 org.hibernate.boot.model.naming.ImplicitNamingStrategy 接口全名 默认: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy...可选官方实现: 名 说明 org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl 匹配JPA2.0标准实现,使用...其他实现都继承于此类。 org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy 默认。...匹配JPA1.0标准实现 物理命名策略 将显式指定或隐式命名策略转换得到逻辑名称转换为数据库实际使用物理名称 配置路径:spring.jpa.hibernate.naming.physical-strategy

5800
领券