1. 程式人生 > >Hibernate 繼承對映

Hibernate 繼承對映

繼承對映在 Annotation 中使用 @Inheritance 註解,並且需要使用 strategy 屬性指定繼承策略,繼承策略有 SINGLE_TABLE、TABLE_PER_CLASS 和 JOINED 三種。

一、SINGLE_TABLE

SINGLE_TABLE 是將父類和其所有的子類集合在一塊,存在一張表中,並建立一個新的欄位來判斷物件的型別。

Person.java:

   1:  @Entity
   2:  @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
   3:  @DiscriminatorColumn(name="discriminator"
,discriminatorType=DiscriminatorType.STRING)
   4:  @DiscriminatorValue("person")
   5:  public class Person {
   6:      @Id
   7:      @GeneratedValue
   8:      private int id;
   9:      private String name;
  10:  //Getters and setters omitted here...
  11:  }

@Inheritance 的 strategy 屬性是指定繼承關係的生成策略,@DiscriminatorColumn 註解作用是指定生成的新的判斷物件型別的欄位的名稱和型別,@DiscriminatorValue 註解是確定此類(Person)的標示,即 DiscriminatorColumn 的值。

Student.java:

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

Teacher.java:

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

生成的資料庫表如下:

image

存入資料後結構如下:

image

二、TABLE_PER_CLASS

TABLE_PER_CLASS 是為每一個類建立一個表,這些表是相互獨立的。

Person.java:

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

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

相關推薦

Hibernate 繼承對映

繼承對映在 Annotation 中使用 @Inheritance 註解,並且需要使用 strategy 屬性指定繼承策略,繼承策略有 SINGLE_TABLE、TABLE_PER_CLASS 和 JOINED 三種。 一、SINGLE_TABLE SINGLE_TABL

Hibernate 繼承對映

public class Staff { /** * 主鍵 */ private int id; /** * 員工姓名 */ private String staffName;

Hibernate繼承對映之一_用一張表對映

這次給大家發的是hibernate的繼承對映,繼承對映的例項有很多:例如dog、cat都是animal的子類 這裡用的是文章Article、主題Topic和回覆Reply給大家做講解。 主題和回覆都

Hibernate繼承對映的“Could not format discriminator value to SQL string”錯誤解決方法

藉助於Hibernate強大的O/R Mapping能力,我們能夠通過discriminator輕易地將一顆繼承樹對映到一個表中,通過discriminator確定具體對映的子類。 在設定@hibernate.discriminator column="type" typ

Hibernate繼承對映與多型查詢

一、繼承對映: 關係資料庫的表之間不存在繼承關係,為了把域模型的繼承關係對映到資料庫中,Hibernate提供了以下三種對繼承關係對映的方法: 每個子類一張表 一張表儲存繼承體系中所有類的資訊(該表由繼承體系中所有類的屬性的並集所對映的欄位組成) 公共資訊放在父類表

Hibernate繼承對映詳解

在面向物件的程式領域中,類與類之間是有繼承關係的,例如Java世界中只需要extends關鍵字就可以確定這兩個類的父子關係,但是在關係資料庫的世界中,表與表之間沒有任何關鍵字可以明確指明這兩張表的父子關係,表與表是沒有繼承關係這樣的說法的。為了將程式領域中的繼承關係反映到資

Hibernate - 繼承關聯關係對映

對於面向物件的程式設計語言而言,繼承和多型是兩個最基本的概念。Hibernate 的繼承對映可以理解持久化類之間的繼承關係。例如:人和學生之間的關係。學生繼承了人,可以認為學生是一個特殊的人,如果對人進行查詢,學生的例項也將被得到。 Hibernate支援三種繼承對映策略:

Hibernate 繼承 - 每個類都對映成一個類

Hibernate 繼承 - 每個類都對映成一個類 - Image.java package com.java1234.hibernate.model; public class Image { private int id; private String name; //建立

Hibernate 繼承 - 根類對映成一個表

Hibernate 繼承 - 根類對映成一個表 - Image.java package com.java1234.hibernate.model; public class Image { private int id; private String name; //建立st

Hibernate 繼承 - 每個實現類對映成一個表

Hibernate 繼承 類與類之間的繼承是Java的絕對核心,hibernate作為一個用於ORM框架,將類與類之間的繼承對映成表的關係,也是hibernate所支援的功能之一。 實際上在hibernate中有三種方式支援這一特性。 1. 每個實現類對映成一個表 2. 根類對映成一個表 3

(8)hibernate四種繼承對映

一 一個類繼承體系一張表 1 物件模型(java類結構) 2 對映後據庫中的表 3 程式碼 Employee.java package com.learning; public cla

hibernate繼承關係對映方法(一)--共享一張表

對於如下關係: Person.java package com.hust.PO; public class Person { private Integer id; private String name; private Integer

【SSH系列】Hibernate對映 -- 繼承對映

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

hibernate繼承關係對映方法(三)--每個具體類一張表TPC

TPC:所謂是“每個具體類一張表(table per concrete class)”的意思是:使繼承體系中每一個子類都對應資料庫中的一張表。每一個子類對應的資料庫表都包含了父類的資訊,並且包含了自己獨有的屬性。每個子類對應一張表,而且這個表的資訊是完備的,即包含了所有從父

hibernate單表之元件對映繼承對映

表結構: Create table customer( id int primary key, name varchar(15), home_street varchar(255), home

hibernate元件對映繼承對映

元件對映 類的關係: wheel.javapublic class Wheel { private String brandname; private int size; }Car.java public class Car { private int id; pr

2009-04-16 | Hibernate關聯對映繼承對映

  * 子類使用<subclass>標籤定義,在定義subclass的時候,需要注意如下幾點:     Subclass標籤的name屬性是子類的全路徑名     在Subclass標籤中,用discriminator-value屬性來標明本子類的discriminator欄位(用來區分不同類的欄

hibernate】---- 繼承對映

    看hibernate視訊的時候,老師講的繼承對映非常好,所以就在這裡總結一下吧!     繼承對映分為三類: 1、單表繼承,每一個類繼承樹使用一張表 2、具體表繼承,每個類一個表 3、

Hibernate繼承對映

【前言】     不知道大家是否還記得UML中的四種關係?自己回想了一下,還是沒有忘記的,分別是繼承、實現、依賴和關聯。     怎麼突然會想到這樣一個問題?是因為在學習完Hibernate關聯對映之

Hibernate學習-10-元件對映繼承對映

類的關係     組合關係        一個類中包含了另一個類。這兩個類就是組合關係     繼承關係       一個類繼承一個關係 元件對映 com.cx.component.Car package com.cx.component; /** * Created