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: publicclass Teacher extends Person{
4: private String title;
5: //Getters and setters omitted here...
6: }
生成的資料庫表如下:
存入資料後結構如下:
二、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: }
建立的資料庫表如下:
三、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 類似。
生成的資料庫表如下:
相關推薦
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