zoukankan      html  css  js  c++  java
  • 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:

       1:  @Entity
       2:  public class Student extends Person{
       3:      private int score;
       4:  //Getters and setters omitted here...
       5:  }

    Teacher.java:

       1:  @Entity
       2:  public class Teacher extends Person{
       3:      private String title;
       4:  //Getters and setters omitted here...
       5:  }

    创建的数据库表如下:

    image


    三、JOINED

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

    Person.java:

       1:  @Entity
       2:  @Inheritance(strategy=InheritanceType.JOINED)
       3:  public class Person {
       4:      @Id
       5:      @GeneratedValue
       6:      private int id;
       7:      private String name;
       8:  //Getters and setters omitted here...
       9:  }

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

    Student.java:

       1:  @Entity
       2:  public class Student extends Person{
       3:      private int coat;
       4:  //Getters and setters omitted here...
       5:  }

    Teacher.java 类似。

    生成的数据库表如下:

    JOINED

  • 相关阅读:
    利用XAF中的FeatureCenter例子的,直接打开DetailView
    XAF 应用程序模型基础[转]
    XAF 如何给記錄增加版本控制?
    Simpler way to Create a Custom User Control
    建议将小川同志免费租借给欧洲用30年[转]文/端宏斌
    第六集 MSF构思阶段项目团队的组建
    MS_HotFix
    C#域内远程机文件信息注册表访问。
    访问 远程机 盘符 设置
    Silk_ 运行时_控件_属性_捕捉.
  • 原文地址:https://www.cnblogs.com/zqyanywn/p/7753564.html
Copyright © 2011-2022 走看看