转Hibernate继承
hibernate继承映射
以下测试是在mysql中进行的。
1、单表方式
Animal.java
- @Entity
- @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
- @DiscriminatorColumn(name="animalType")
- @DiscriminatorValue("animal")
- public class Animal {
- 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;
- }
- }
Cat.java
- @Entity
- @DiscriminatorValue("cat")
- public class Cat extends Animal {
- private String catName;
- public String getCatName() {
- return catName;
- }
- public void setCatName(String catName) {
- this.catName = catName;
- }
- }
Dog.java
- @Entity
- @DiscriminatorValue(value="dog")
- public class Dog extends Animal{
- private String dogName;
- public String getDogName() {
- return dogName;
- }
- public void setDogName(String dogName) {
- this.dogName = dogName;
- }
- }
TestJunit.java
- @Test
- public void testAnimal(){
- Animal t = new Animal();
- t.setName("animal");
- session.saveOrUpdate(t);
- }
- @Test
- public void testCat(){
- Cat t = new Cat();
- t.setName("cat");
- t.setCatName("cat");
- session.saveOrUpdate(t);
- }
- @Test
- public void testDog(){
- Dog t = new Dog();
- t.setName("dog");
- t.setDogName("dog");
- session.saveOrUpdate(t);
- }
对应生成的数据表是这样的
table---animal
| id | name | animalType | catName | dogName |
| 1 | animal | animal | null | null |
| 2 | cat | cat | cat | null |
| 3 | dog | dog | null | dog |
2、join方式
Animal.java
- @Entity
- @Inheritance(strategy=InheritanceType.JOINED)
- public class Animal {
- 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;
- }
- }
Cat.java
- @Entity
- @PrimaryKeyJoinColumn(name="catId")
- public class Cat extends Animal {
- private String catName;
- public String getCatName() {
- return catName;
- }
- public void setCatName(String catName) {
- this.catName = catName;
- }
- }
Dog.java
- @Entity
- @PrimaryKeyJoinColumn(name="dogId")
- public class Dog extends Animal{
- private String dogName;
- public String getDogName() {
- return dogName;
- }
- public void setDogName(String dogName) {
- this.dogName = dogName;
- }
- }
TestJunit.java
- @Test
- public void testAnimal(){
- Animal t = new Animal();
- t.setName("animal");
- session.saveOrUpdate(t);
- }
- @Test
- public void testCat(){
- Cat t = new Cat();
- t.setName("cat");
- t.setCatName("cat");
- session.saveOrUpdate(t);
- }
- @Test
- public void testDog(){
- Dog t = new Dog();
- t.setName("dog");
- t.setDogName("dog");
- session.saveOrUpdate(t);
- }
对应生成的数据表是这样的
table---Animal
| id | name |
| 1 | animal |
| 2 | cat |
| 3 | dog |
table---cat
| catId | catName |
| 2 | cat |
table---dog
| dogId | dogName |
| 3 | dog |
3、每个实体类对应一个数据表
以下的测试中,Anamal.java中的主键生成策略需要注解成@GeneratedValue(strategy=GenerationType.TABLE),测试是在mysql数据库中进行的。
Animal.java
- @Entity
- @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
- public class Animal {
- private int id;
- private String name;
- @Id
- @GeneratedValue(strategy=GenerationType.TABLE)
- 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;
- }
- }
Cat.java
- @Entity
- @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
- public class Cat extends Animal {
- private String catName;
- public String getCatName() {
- return catName;
- }
- public void setCatName(String catName) {
- this.catName = catName;
- }
- }
Dog.java
- @Entity
- @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
- public class Dog extends Animal{
- private String dogName;
- public String getDogName() {
- return dogName;
- }
- public void setDogName(String dogName) {
- this.dogName = dogName;
- }
- }
TestJunit.java
- @Test
- public void testAnimal(){
- Animal t = new Animal();
- t.setName("animal");
- session.saveOrUpdate(t);
- }
- @Test
- public void testCat(){
- Cat t = new Cat();
- t.setName("cat");
- t.setCatName("cat");
- session.saveOrUpdate(t);
- }
- @Test
- public void testDog(){
- Dog t = new Dog();
- t.setName("dog");
- t.setDogName("dog");
- session.saveOrUpdate(t);
- }
对应生成的数据表是这样的
table---animal
| id | name |
| 1 | animal |
table---cat
| id | name | catName |
| 2 | cat | cat |
table---dog
| id | name | dogName |
| 3 | dog | dog |
转Hibernate继承的更多相关文章
- hibernate继承(转)
http://justsee.iteye.com/blog/1070588 一.继承关系_整个继承树映射到一张表 对象模型(Java类结构) 一个类继承体系一张表(subclass)(表结构) Emp ...
- 【JavaEE】Hibernate继承映射,不用多态查询只查父表的方法
几个月前,我在博问里面发了一个问题:http://q.cnblogs.com/q/64900/,但是一直没有找到好的答案,关闭问题以后才自己解决了,在这里分享一下. 首先我重复一下场景,博问里面举的动 ...
- SSH开发实践part3:hibernate继承映射
0 大家好.上次讲了关于hibernate中双向1-N的映射配置,可以参考:http://www.cnblogs.com/souvenir/p/3784510.html 实际项目中,对象间的关系比较复 ...
- Hibernate继承映射
在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键字可以明确指明这两张表的父子 ...
- web进修之—Hibernate 继承映射(5)
先看三个类的继承关系,Payment是父类,CashPayment和CreditCardPayment是Payment的子类: view plaincopy to clipboardprint p ...
- Hibernate继承类的实现
版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5603724.html 对于继承关系类的映射.比如在论坛中文章(Ar ...
- hibernate 继承映射关系( SINGLE_TABLE)
三种继承映射关系. 1,SINGLE_TABLE person student teacher 在一个表中,student和teacher继承自person,通过一个Discriminato ...
- Hibernate 继承映射可能会遇到的错误
问题: 我们在配置hibernate的时候,默认是会配置下面的两个属性的 <property name="hibernate.default_catalog">hibe ...
- Hibernate继承注解
hibernate应用中,继承的用途或目的主要有两点: 组件化:故明思义,把重复性的代码抽取成组件,以便重用和维护.hibernate应用中,一些重复的字段,重复的映射配置,就需要抽取成组件. 多态性 ...
随机推荐
- kettle的下载、安装和初步使用(Ubuntu 16.04平台下)(图文详解)
不多说,直接上干货! 能够看我这篇博客的博友们,想必是已经具备一定基础了. 扩展博客 kettle的下载.安装和初步使用(windows平台下)(图文详解) kettle的下载 Kettle可以在h ...
- JQuery学习系列篇(一)
jQuery是一套Javascript脚本库:注意jQuery是脚本库, 而不是脚本框架. "库"不等于"框架", 比如"System程序集" ...
- 函数与装饰器Python学习(三)
1.1 文件处理 1.1.1 打开文件过程 在Python中,打开文件,得到文件句柄并赋值给一个变量,默认打开模式就为r f=open(r'a.txt','w',encoding='utf-8') p ...
- 新手配置vux
1.首先跟平常一样创建一个vue的项目 2.开始配置vux 第一步 安装vux npm install vux --save 第二步 安装vux-loader npm install vux-loa ...
- 使用JS&jQuery改善用户体验
第一章 JavaScript基本语法 一.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&= ...
- WCF(三)IIS寄宿
WCF常用的一种使用方式是寄宿在IIS中. IIS寄宿操作流程如下: 1.创建IIS物理路径对应的文件夹,文件夹名称是WCFIIS. 2.在WCFIIS文件夹中添加文本文件,在文本文件中写入<% ...
- CorelDRAW 2018新增功能介绍
2018年4月11日,CorelDRAW 2018正式对外发布,最新版设计软件包已经过全面更新,是近几年来发行的最强大版本,可协助绘图专业人士将创意转换为令人惊艳的专业视觉设计.CorelDRAW 2 ...
- 作用域与this
面向对象 一.单例模式 1.1 对象数据类型的作用: 把描述一个对象的属性和方法放在一个单独的空间,与其他的对象分割开,即时出现属性名相同的情况,也不会产生冲突 var name="xiao ...
- UVA1584-Circular Sequence(紫书例题3.6)
Some DNA sequences exist in circular forms as in the following gure, which shows a circular sequence ...
- 如何解决zabbix中自定义监控mysql因密码造成的 Warning
1.--show-warnings=false 在指定mysql命令获取参数时,指定不获取 Warning.不过亲测这个方法不是很有效 例如: mysql -uroot -p123 --show-wa ...