【Hibernate学习】 ——ORM(四)再次认识实体继承

在信用办时,做失信、守信、黑名单这一块的时候,先把原来的需求看了看,紧接着就开始设计实体,这一块大部分都是相同的信息,所以就设计了一个实体,并且用一个状态标识出来是失信、守信还是黑名单。

在之后的修改中,特别不方便,每次修改这一块,这都要出问题。也就是说每一次都需要自己的实体去维护自己的状态。但是如果我们把这个状态抽出来,就变成了我们公共的去维护这些“状态”,这样就大大简化了我们的工作,我们只需要对基本表的信息进行维护就可以了。这就是单表继承。

代码:

父类:

@Entity(name="Company")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.STRING)
public class Company {
               基本字段
        }

子类:

@Entity
@DiscriminatorValue(value="OnCreaditCompany")
public class OnCreaditCompany extends Company {

}

单表继承,是一张大表中,包括了父类,子类的所有属性,通过Type来区分是哪个子类。单表继承虽然是多写了几个实体类,但是类和类之间的层次结构清晰,并且更具有面向对象的优势。相比而言,比我们设计的用一个状态字段去维护,操作起来就更方便了。

有利必有弊,我们要权衡一下,并不是所有的情况下实体继承都是适用的。但是也不能不考虑实体继承,如果是大量的数据库表的话,访问数据时将存在大量的关联表操作,效率低。

时间: 2024-08-23 23:02:49

【Hibernate学习】 ——ORM(四)再次认识实体继承的相关文章

Hibernate学习---第四节:一级缓存

一.Hibernate 一级缓存的概念: 一级缓存生命周期很短与 session 生命周期一致,所以一级缓存也叫 session 级缓存或事务级缓存.位于缓存中的对象处于持久化状态,它和表中的相关记录对应,session 能够在某些时间点,按照缓存中持久化对象的属性变化来同步数据库中表的记录,这一过程称为清理缓存. (1).一级缓存实现原理.session 缓存是由它的实现类 sessionImpl 中定义的一些集合属性构成的,原理是保证有一个引用在关联着某个持久化对象,保持它的生命周期不会结束

Hibernate学习(四)

映射关系(关联映射,使用xml文件进行配置) (1)一对一映射(一个公司对应一个地址,地址和公司的关系是一对一) 第一步:建立类 公司类: //一对一 xml配置 public class CompanyXML { private int id; private String name; private AddressXML addressId; public int getId() { return id; } public void setId(int id) { this.id = id;

【Java EE 学习第47天】【Hibernate学习第四天】【sesion】【一级缓存】【懒加载】

一.Session概述 1.Session 接口是 Hibernate 向应用程序提供的操纵对数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载Java 对象的方法. 2.理解Session的缓存 使用缓存的目的:尽量减少访问数据库的频率 (1)在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存. 只要 Session 实例没有结束生命周期, 存放在它缓存中的对象也不会结束生命周期 (2)当session的save()方

swift学习笔记(四)关于类的继承

在swift中,继承是区分类与其它对象的基本特征 继承后的子类能够重写父类的方法,包含类方法和实例方法,属性和附属脚本(subscript) 在继承过程中,构造器方法init()是不被继承的,须要显示标明 class Tandem: Bicycle { init() { super.init() maxPassengers = 2 }  } 子类仅仅能够改动从父类继承来的变量属性,而不能够改动常量let属性 关于重写override 重写方法:能够通过super.function来重写父类的方法

Hibernate学习笔记(四) — session的产生方式 与 一对多关系映射

一.session的创建 Session是由SessionFactory负责创建的,而SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一个SessionFactory并从中获取Session实例,但Session不是线程安全的. 每次openSession,产生的都是一个新的session,相当于创建一个新的连接.但是有很多时候,并不希望这样.比如在淘宝购物,在付账的一瞬间,至少有三件事情发生,转账,仓库数据变化,购物历史记录.而这三件事有必须在同一事务下.自然我们会联

hibernate学习(四)hibernate的一级缓存&快照

缓存:提高效率 硬件的 CPU缓存   硬盘缓存   内存 软件的  io流缓存 hibernate  的一级缓存   也是为了操作数据库的效率. 证明一级缓存在  : Person p=session .get(Person.class, 1); Person p1=session.get(Person.class,2); Person  p2=session.get(Person.class,3); System.out.println(p=p1); 控制台输出为: select   * 

【Hibernate学习】 ——ORM(一)

Hibernate是一种能实现ORM的框架.ORM即Object Relational Mapping,对象关系映射.也就是将关系数据库中表的数据映射成为对象,也就是说将表与表之间的操作映射成对象与对象之间的操作,通过实体类来达到操作表的目的.总之就是把对数据库的操作转化为对对象的操作,从而更体现了面向对象的思想. 一对一关联映射策略包括主键关联和唯一外键关联. 单向一对一 主键关联 让两个对象有相同的主键值,表名它们之间的一对一关系,数据库没有额外的字段来维护它们之间的关系,仅仅通过表的主键来

【Hibernate学习】 ——ORM(三)

前面几种关系我们以前就经常用,对于继承我们也并不陌生,经常接触的类与类之间的继承用extends关键字,那么在表与表的关系中如何表示呢?下面我们来讲继承映射. 继承有三种实现的策略,单表继承,具体表继承,类表继承.下面来分析一下这三种方式 继承关联类关系  单表继承 每棵类继承树使用一个表,可知,这三个类在一张表中.如下表: 这张表包括了父类,子类的所有属性,通过Type来区分是哪个子类. 对象模型映射到关系模型: <classname="com.bjpowernode.hibernat.

hibernate学习笔记(四)

学习hibernate很关键的一个地方就是关联映射,今天我们来扒啦扒拉hibernate映射关系中的多对一单向和一对多单向. 首先来说一下多对一单向,也就是N-->1,多对一的例子在生活中还是很常见的吧,比如多个人住在一个地方,多个学生在一个班级,所谓的多对一就是通过多的一方能够找到 一得一方,既然是单向的,那么肯定是一是找不到多的,什么意思呢?就是知道张三是一年级一班的,但是不知道一年级一班有张三这个人,如果我非要知道怎么办呢?凉拌呗,这个..开个玩笑啊,如果想通过班级知道学生,那么肯定的是双