Hibernate继承映射(@Inheritance)

继承映射在 Annotation 中使用 @Inheritance 注解,并且需要使用 strategy 属性指定继承策略,继承策略有 SINGLE_TABLE、TABLE_PER_CLASS 和 JOINED 三种。

一、SINGLE_TABLE

SINGLE_TABLE 是将父类和其所有的子类集合在一块,存在一张表中,并创建一个新的字段来判断对象的类型。

Person.java:

@Entity
   @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
   @DiscriminatorColumn(name="discriminator",discriminatorType=DiscriminatorType.STRING)
   @DiscriminatorValue("person")
   public class Person {
      @Id
      @GeneratedValue
      private int id;
      private String name;
  //Getters and setters omitted here...
 }

@Inheritance 的 strategy 属性是指定继承关系的生成策略,@DiscriminatorColumn 注解作用是指定生成的新的判断对象类型的字段的名称和类型,@DiscriminatorValue 注解是确定此类(Person)的标示,即 DiscriminatorColumn 的值。

Student.java:

@Entity
    @DiscriminatorValue("student")
    public class Student extends Person{
        private int score;
   //Getters and setters omitted here...
    }

Teacher.java:

@Entity
   @DiscriminatorValue("teacher")
   public class Teacher extends Person{
       private String title;
   //Getters and setters omitted here...
   }

生成的数据库表如下:

image

存入数据后结构如下:

image

二、TABLE_PER_CLASS

TABLE_PER_CLASS 是为每一个类创建一个表,这些表是相互独立的。

Person.java:

@Entity
     @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
     public class Person {
         @Id
         private int id;
         private String name;
     //Getters and setters omitted here...
     }

Student.java:

@Entity
     public class Student extends Person{
        private int score;
     //Getters and setters omitted here...
     }

Teacher.java:

 @Entity
     public class Teacher extends Person{
         private String title;
     //Getters and setters omitted here...
     }

创建的数据库表如下:

image

三、JOINED

JOINED 是将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系。

Person.java:

@Entity
    @Inheritance(strategy=InheritanceType.JOINED)
     public class Person {
         @Id
         @GeneratedValue
         private int id;
        private String name;
     //Getters and setters omitted here...
     }

子类中只需声明与父类不同的域即可:

Student.java:

 @Entity
     public class Student extends Person{
         private int coat;
     //Getters and setters omitted here...
     }

Teacher.java 类似。

生成的数据库表如下:

JOINED

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值