hibernate继承映射 
以下测试是在mysql中进行的。

1、单表方式 
Animal.java

  1. @Entity
  2. @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
  3. @DiscriminatorColumn(name="animalType")
  4. @DiscriminatorValue("animal")
  5. public class Animal {
  6. private int id;
  7. private String name;
  8. @Id
  9. @GeneratedValue
  10. public int getId() {
  11. return id;
  12. }
  13. public void setId(int id) {
  14. this.id = id;
  15. }
  16. public String getName() {
  17. return name;
  18. }
  19. public void setName(String name) {
  20. this.name = name;
  21. }
  22. }

Cat.java

  1. @Entity
  2. @DiscriminatorValue("cat")
  3. public class Cat extends Animal {
  4. private String catName;
  5. public String getCatName() {
  6. return catName;
  7. }
  8. public void setCatName(String catName) {
  9. this.catName = catName;
  10. }
  11. }

Dog.java

  1. @Entity
  2. @DiscriminatorValue(value="dog")
  3. public class Dog extends Animal{
  4. private String dogName;
  5. public String getDogName() {
  6. return dogName;
  7. }
  8. public void setDogName(String dogName) {
  9. this.dogName = dogName;
  10. }
  11. }

TestJunit.java

  1. @Test
  2. public void testAnimal(){
  3. Animal t = new Animal();
  4. t.setName("animal");
  5. session.saveOrUpdate(t);
  6. }
  7. @Test
  8. public void testCat(){
  9. Cat t = new Cat();
  10. t.setName("cat");
  11. t.setCatName("cat");
  12. session.saveOrUpdate(t);
  13. }
  14. @Test
  15. public void testDog(){
  16. Dog t = new Dog();
  17. t.setName("dog");
  18. t.setDogName("dog");
  19. session.saveOrUpdate(t);
  20. }

对应生成的数据表是这样的 
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

  1. @Entity
  2. @Inheritance(strategy=InheritanceType.JOINED)
  3. public class Animal {
  4. private int id;
  5. private String name;
  6. @Id
  7. @GeneratedValue
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. }

Cat.java

  1. @Entity
  2. @PrimaryKeyJoinColumn(name="catId")
  3. public class Cat extends Animal {
  4. private String catName;
  5. public String getCatName() {
  6. return catName;
  7. }
  8. public void setCatName(String catName) {
  9. this.catName = catName;
  10. }
  11. }

Dog.java

  1. @Entity
  2. @PrimaryKeyJoinColumn(name="dogId")
  3. public class Dog extends Animal{
  4. private String dogName;
  5. public String getDogName() {
  6. return dogName;
  7. }
  8. public void setDogName(String dogName) {
  9. this.dogName = dogName;
  10. }
  11. }

TestJunit.java

  1. @Test
  2. public void testAnimal(){
  3. Animal t = new Animal();
  4. t.setName("animal");
  5. session.saveOrUpdate(t);
  6. }
  7. @Test
  8. public void testCat(){
  9. Cat t = new Cat();
  10. t.setName("cat");
  11. t.setCatName("cat");
  12. session.saveOrUpdate(t);
  13. }
  14. @Test
  15. public void testDog(){
  16. Dog t = new Dog();
  17. t.setName("dog");
  18. t.setDogName("dog");
  19. session.saveOrUpdate(t);
  20. }

对应生成的数据表是这样的 
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

  1. @Entity
  2. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
  3. public class Animal {
  4. private int id;
  5. private String name;
  6. @Id
  7. @GeneratedValue(strategy=GenerationType.TABLE)
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. }

Cat.java

  1. @Entity
  2. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
  3. public class Cat extends Animal {
  4. private String catName;
  5. public String getCatName() {
  6. return catName;
  7. }
  8. public void setCatName(String catName) {
  9. this.catName = catName;
  10. }
  11. }

Dog.java

  1. @Entity
  2. @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
  3. public class Dog extends Animal{
  4. private String dogName;
  5. public String getDogName() {
  6. return dogName;
  7. }
  8. public void setDogName(String dogName) {
  9. this.dogName = dogName;
  10. }
  11. }

TestJunit.java

  1. @Test
  2. public void testAnimal(){
  3. Animal t = new Animal();
  4. t.setName("animal");
  5. session.saveOrUpdate(t);
  6. }
  7. @Test
  8. public void testCat(){
  9. Cat t = new Cat();
  10. t.setName("cat");
  11. t.setCatName("cat");
  12. session.saveOrUpdate(t);
  13. }
  14. @Test
  15. public void testDog(){
  16. Dog t = new Dog();
  17. t.setName("dog");
  18. t.setDogName("dog");
  19. session.saveOrUpdate(t);
  20. }

对应生成的数据表是这样的 
table---animal

id name
1 animal

table---cat

id name catName
2 cat cat

table---dog

id name dogName
3 dog dog

转Hibernate继承的更多相关文章

  1. hibernate继承(转)

    http://justsee.iteye.com/blog/1070588 一.继承关系_整个继承树映射到一张表 对象模型(Java类结构) 一个类继承体系一张表(subclass)(表结构) Emp ...

  2. 【JavaEE】Hibernate继承映射,不用多态查询只查父表的方法

    几个月前,我在博问里面发了一个问题:http://q.cnblogs.com/q/64900/,但是一直没有找到好的答案,关闭问题以后才自己解决了,在这里分享一下. 首先我重复一下场景,博问里面举的动 ...

  3. SSH开发实践part3:hibernate继承映射

    0 大家好.上次讲了关于hibernate中双向1-N的映射配置,可以参考:http://www.cnblogs.com/souvenir/p/3784510.html 实际项目中,对象间的关系比较复 ...

  4. Hibernate继承映射

    在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键字可以明确指明这两张表的父子 ...

  5. web进修之—Hibernate 继承映射(5)

    先看三个类的继承关系,Payment是父类,CashPayment和CreditCardPayment是Payment的子类:   view plaincopy to clipboardprint p ...

  6. Hibernate继承类的实现

    版权声明:本文为博主原创文章,如需转载请标注转载地址. 博客地址:http://www.cnblogs.com/caoyc/p/5603724.html  对于继承关系类的映射.比如在论坛中文章(Ar ...

  7. hibernate 继承映射关系( SINGLE_TABLE)

    三种继承映射关系.   1,SINGLE_TABLE   person student  teacher 在一个表中,student和teacher继承自person,通过一个Discriminato ...

  8. Hibernate 继承映射可能会遇到的错误

    问题: 我们在配置hibernate的时候,默认是会配置下面的两个属性的 <property name="hibernate.default_catalog">hibe ...

  9. Hibernate继承注解

    hibernate应用中,继承的用途或目的主要有两点: 组件化:故明思义,把重复性的代码抽取成组件,以便重用和维护.hibernate应用中,一些重复的字段,重复的映射配置,就需要抽取成组件. 多态性 ...

随机推荐

  1. SpringBoot(十一) Dubbo分布式与Zookeeper

    Dubbo简介 1.Dubbo简介 1. Dubbo是什么? dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上 ...

  2. localStorage、sessionStorage、cookie、session

    localStorage 和 sessionStorage HTML5 提供了两种在客户端存储数据的新方法:localStorage 和 sessionStorage: 两者都是仅在客户端(即浏览器) ...

  3. pgpool如何对数据库节点进行状态检查及相关数据结构描述

    /* * configuration parameters */typedef struct {    char *listen_addresses;            /* hostnames/ ...

  4. 常规RPC通讯过程【转载】

    在 HTTP2 协议正式开始工作前, 如果已经知道服务器是 HTTP2 的服务器, 通讯流程如下: 客户端必须首先发送一个连接序言,其逻辑结构: PRI * HTTP/2.0\r\n\r\nSM\r\ ...

  5. Unity局部坐标系与世界坐标系的区别

    局部坐标旋转是指以父物体为参考,进行旋转. 而世界坐标系以"坐标陀螺"来进行旋转. 类似的情况例如: 东.南.西.北.是世界坐标系. 前.后.左.右是局部坐标系

  6. java容器基础

    总结一下学过的java容器知识. 一.java容器框架 由于之前学习的java容器类比较混乱,先简单的整理一下java集合框架. 首先,像这种图,网上到处都是,因为这个也算比较准确吧,我也懒得自己画了 ...

  7. 执行python manage.py makemigrations时报错TypeError: __init__() missing 1 required positional argument: 'on_delete'

    在执行python manage.py makemigrations时报错: TypeError: __init__() missing 1 required positional argument: ...

  8. 进程线程之pid,tid

    Linux中,每个进程有一个pid,类型pid_t,由getpid()取得.Linux下的POSIX线程也有一个id,类型pthread_t,由pthread_self()取得,该id由线程维护,其i ...

  9. xgboost学习

    1.原理 https://www.cnblogs.com/zhouxiaohui888/p/6008368.html 2.实战 xgboost中比较重要的参数介绍: (1)学习率:learning r ...

  10. CefSharp的简单应用,制作自动学习视频软件(基于Chromium)

    CefSharp在NuGet的简介是“The CefSharp Chromium-based browser component”,机翻的意思就是“基于Cefsharp Chromium的浏览器组件” ...