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

在之后的改动中,特别不方便。每次改动这一块,这都要出问题。也就是说每一次都须要自己的实体去维护自己的状态。

可是假设我们把这个状态抽出来,就变成了我们公共的去维护这些“状态”,这样就大大简化了我们的工作,我们仅仅须要对基本表的信息进行维护就能够了。这就是单表继承。

代码:

父类:

@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来区分是哪个子类。单表继承尽管是多写了几个实体类,可是类和类之间的层次结构清晰,而且更具有面向对象的优势。

相比而言,比我们设计的用一个状态字段去维护,操作起来就更方便了。

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

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

  1. Hibernate学习笔记(二)—— 实体规则&对象的状态&一级缓存

    一.持久化类 1.1 什么是持久化类? Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓的持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么是持久化,什么又是持 ...

  2. Hibernate学习(四)———— 双向多对多映射关系

    一.小疑问的解答 问题一:到这里,有很多学习者会感到困惑,因为他不知道使用hibernate是不是需要自己去创建表,还是hibernate全自动,如果需要自己创建表,那么主外键这种设置也是自己设置吗? ...

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

    一.Session概述 1.Session 接口是 Hibernate 向应用程序提供的操纵对数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载Java 对象的方法. 2.理解Sessi ...

  4. mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)

    下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...

  5. Hibernate学习笔记四 查询

    HQL语法 1.基本语法 String hql = " from com.yyb.domain.Customer ";//完整写法 String hql2 = " fro ...

  6. Hibernate学习(四)

    一对多测试案例 1.类图 2.创建表 drop table if exists t_student ; drop table if exists t_class ; create table t_cl ...

  7. Hibernate学习(四)get和Load比较

    package cn.lonecloud.test.crud; import org.hibernate.HibernateException; import org.hibernate.Sessio ...

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

    缓存:提高效率 硬件的 CPU缓存   硬盘缓存   内存 软件的  io流缓存 hibernate  的一级缓存   也是为了操作数据库的效率. 证明一级缓存在  : Person p=sessio ...

  9. Hibernate学习笔记四:事务管理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6768298.html  一:需要事务的Session操作 Session操作中,查询类操作是不需要事务就能生效 ...

随机推荐

  1. python自动化测试学习笔记-4常用模块

    常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...

  2. ACM_Mystery

    Mystery Time Limit: 2000/1000ms (Java/Others) Problem Description: No Description Input: The first l ...

  3. Linux命令(005) -- kill、pkill和killall的比较

    kill命令用来“杀掉”指定进程PID的进程.终止一个前台进程可以使用Ctrl+C,终止一个后台进程就须用kill命令.kill命令是通过向进程发送指定的信号来结束相应进程的.在默认情况下,kill命 ...

  4. Coursera公开课-Machine_learing:编程作业3

    第四周 编程作业: Multi-class Classification and Neural Networks 这周作业与上一周有许多相同的部分,比如longistic regression中的lr ...

  5. 【Leetcode】84. Largest Rectangle in Histogram 85. Maximal Rectangle

    问题描述: 84:直方图最大面积. 85:0,1矩阵最大全1子矩阵面积. 问题分析: 对于84,如果高度递增的话,那么OK没有问题,不断添加到栈里,最后一起算面积(当然,面积等于高度h * disPo ...

  6. C#模拟百度登录并到指定网站评论回帖(一)

    核心信息: 请求网址:  https://passport.baidu.com/v2/api/?login请求方法:  POST状态码:  HTTP/1.1 200 OK请求头  //用户代理 Use ...

  7. 【转】Java中的String为什么是不可变的? -- String源码分析

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...

  8. MonoBehaviour简述

    Unity中的脚本都是继承自MonoBehaviour. 一.基础函数: 创建脚本就默认的update.start方法:(这些官方的文档都是有的) Start:Update函数第一次运行前调用,一般用 ...

  9. 【PostgreSQL-9.6.3】触发器实例

    1. 创建一个触发器,表中的行在任何时候被插入或更新时,当前用户名和时间也会被标记在该行中.并且它会检查雇员的姓名以及薪水. --创建测试表 CREATE TABLE emp ( empname te ...

  10. Python 时间处理---------笔记

    时区处理&格式化 import pytz from datetime import datetime # 设置时区 timezone = pytz.timezone('Asia/Shangha ...