hibernate继承策略之单表映射

类与类之间的继承关系,hibernate提供了三种映射策略。

InheritanceType.SINGE_TABLE :单表继承(在数据库中用同一张表存储具有继承关系的实体对象,通过不同的类型来区分父类与子类之间的关系)

InheritanceType.JOINED: 连接子类策略(在数据库中表示为用外键关联)

InheritanceType.TABLE_PER_CLASS: (每个子类对应一张数据库表模型)

(该篇只针对单表继承策略)

首先建表模型:

CREATE TABLE PERSION (ID NUMBER(18),  NAME VARCHAR2(255),  SEX NUMBER(2),  TYPE NUMBER(2)  );

对应的实体模型:

父类:

package cn.com.httpclient;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
/**
 * 孩子,这是人类
 * @author xiaomingtongxie
 *
 */
@Entity
@Table(name = "PERSION")
@SequenceGenerator(name = "S_PERSION", sequenceName = "S_PERSION", allocationSize = 1)
//类继承方式,单表继承
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
//辨别者列,用于区分对应的实体
@DiscriminatorColumn(name = "type" ,discriminatorType = DiscriminatorType.INTEGER)
public class YPersion {
	@Id
	@GeneratedValue(generator = "S_PERSION", strategy = GenerationType.SEQUENCE)
	private Long id;
	/** 名字 */
	private String name;
	/** 性别 */
	private Integer sex;

	// /**类型*/
	// private Byte type;
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getSex() {
		return sex;
	}

	public void setSex(Integer sex) {
		this.sex = sex;
	}

	// 人的类型
	/** 工人 */
	public static int TYPE_GR = 0;
	/** 好人 */
	public static int TYPE_GOOD = 1;
	/** 坏人 */
	public static int TYPE_BAD = 2;

}

子类:

package cn.com.httpclient;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Table;

/**
 * 人类的子类,好人
 * @author xiaomingtongxie
 *
 */
@Entity
@Table(name = "PERSION")
//辨别者列值,好人
@DiscriminatorValue("1")
public class YGoodPersion extends YPersion{

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏idba

order by 原理以及优化

一 简介 偏向于业务的(MySQL)DBA或者业务的开发者来说,order by 排序是一个常见的业务功能,将结果根据指定的字段排序,满足前端展示的需求。然而...

1053
来自专栏pangguoming

sharding-jdbc之——分库分表实例

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79368021

1781
来自专栏互联网开发者交流社区

用于 SELECT 和 WHERE 子句的函数

1413
来自专栏chenssy

【死磕Sharding-jdbc】---SQL解析-词法分析

sharding-jdbc对SQL解析的源码主要在下图所示parsing模块中,由下图可知SQL解析主要分为两部分:lexer和parser。lexer就是本文...

1302
来自专栏Python爬虫实战

MySQL从零开始:05 MySQL数据类型

距离上次更新 MySQL 从零开始系列,已经过去了十几天,时间隔得有点长,由于我选用的是 MySQL 的最新版本,网上的教程大多停留在 MySQL 5.x,所以...

1363
来自专栏栗霖积跬步之旅

第六章:过滤数据

表名:products 字段:product_id、product_name、product_price、vend_id(供应商) 1.使用WHERE子句:...

1826
来自专栏Python攻城狮

MySQL高级1.mysql高级3.内置函数4.时间与字符串的相互转换

要求:表的类型必须是innodb或bdb类型(表的默认类型就是innodb),才可以对此表使用事务

1401
来自专栏数据和云

DB2 Vs MySQL系列 | MySQL与DB2的数据类型对比

随着MySQL数据库的应用越来越广泛,DB2向MySQL数据库的迁移需求也越来越多。进行数据库之间迁移的时候,首先遇到的并且也是最基本最重要的就是两种数据库数据...

3666
来自专栏Python、Flask、Django

Flask 项目系列 -- 基于Flask打造招聘网站(2017-12-07更新)

1303
来自专栏Zephery

数据库

1.SQL执行的顺序 ? 2.NULL “空值” 和”NULL”的概念: 1:空值(‘’)是不占用空间的,判断空字符用 = ‘’ 或者 <> ‘’ 来进行处...

3698

扫码关注云+社区