1. 程式人生 > >(8)hibernate四種繼承對映

(8)hibernate四種繼承對映

一 一個類繼承體系一張表

1 物件模型(java類結構)


2 對映後據庫中的表


3 程式碼

Employee.java

package com.learning;

public class Employee {
	
	private int id;
	
	private String name;

	
	
	public Employee() {
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	
	
}

Sales.java

package com.learning;

public class Sales extends Employee{
	
	private String sell;
	
	
	
	public Sales() {
		
	}

	public String getSell() {
		return sell;
	}

	public void setSell(String sell) {
		this.sell = sell;
	}
	
	
}

Skiller.java

package com.learning;

public class Skiller extends Employee {
	
	private String skill;

	
	
	public Skiller() {
		
	}

	public String getSkill() {
		return skill;
	}

	public void setSkill(String skill) {
		this.skill = skill;
	}
	
	
}

Employee.hbm.xml


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping package="com.learning">
 	<class table="employee" name="Employee" discriminator-value="employee">
 		<id name="id">
 		 	<generator class="native"/>
 		</id>
 		<discriminator column="type" type="string"/>
 		<property name="name" column="name"/>
 		<subclass name="Skiller" discriminator-value="skiller">
 			<property name="skill" />
 		</subclass>
 		<subclass name="Sales" discriminator-value="sales">
 			<property name="sell" />
 		</subclass>
 	</class>
 </hibernate-mapping> 

測試類 

ExtendsOneTest.java

package com.test;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.learning.Employee;
import com.learning.Sales;
import com.learning.Skiller;


public class ExtendsOneTest {
	private SessionFactory sessionFactory;
	{
		this.init();
	}

	private void init(){
		  Configuration cfg = new Configuration();
		  sessionFactory= cfg.configure().buildSessionFactory();
	}
	
	/**
	 * 公用一張表
	 * */
	private void test(){
		Session session = this.sessionFactory.openSession();
		session.beginTransaction();
		
		Employee employee = new Employee();
		employee.setName("employee name");
	
		Skiller skiller = new Skiller();
		skiller.setName("skiller name");
		skiller.setSkill("skill");
	
		Sales sales = new Sales();
		sales.setSell("sales name");
		sales.setSell("sell");
		
		session.save(employee);
		session.save(skiller);
		session.save(sales);
	
		session.getTransaction().commit();
        session.close();
         
	}

	public static void main(String[] args) {
		ExtendsOneTest extendsOneTest = new ExtendsOneTest();
		extendsOneTest.test();
	}

}

資料庫結果


二 每個子類不同的部分用一張表

1 物件模型(java類結構)與上面相同

2 對映後據庫中的表


3 程式碼

Employee.java ,Sales.java,Skiller.java與上面相同

Employee.hbm.xml對映檔案

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping package="com.learning">
 	<class table="employee" name="Employee">
 		<id name="id">
 		 	<generator class="native"/>
 		</id>
 		<property name="name" column="name"/>
 		<joined-subclass name="Skiller" table="skiller">
 			<key column="emp_id"/>
 			<property name="skill" />
 		</joined-subclass>
 		<joined-subclass name="Sales" table="sales">
 			<key column="emp_id"/>
 			<property name="sell" />
 		</joined-subclass>
 		
 	</class>
 </hibernate-mapping> 

測試類與ExtendsOneTest.java相同

資料庫中結果




三 繼承關係與內連線結合

混合使用”一個類繼承體系一張表”和”每個子類一張表”

1 物件模型(java類結構)與上面相同

2 對映後據庫中的表


3程式碼

Employee.java ,Sales.javaSkiller.java與上面一樣

Employee.hbm.xml對映檔案

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping package="com.learning">
 <class table="employee" name="Employee" discriminator-value="employee">
 		<id name="id">
 		 	<generator class="native"/>
 		</id>
 		<discriminator column="type" type="string"/>
 		<property name="name" column="name"/>
 		<subclass name="Skiller" discriminator-value="skiller">
 			<property name="skill" />
 		</subclass>
 		<subclass name="Sales" discriminator-value="sales">
 			<join table="sales">
 				<key column="emp_id" />
 				<property name="sell" />
 			</join>
 		</subclass>
 	</class>	
 </hibernate-mapping> 

資料庫截圖



四 每個具體類一張表

1 物件模型(java類結構)與上面一樣

2 對映後的結果


3程式碼

Employee.java , Sales.javaSkiller.java與上面相同

Employee.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 <hibernate-mapping package="com.learning">
 <class table="employee" name="Employee" >
 		<id name="id">
 		 	<generator class="hilo"/>
 		</id>
 		<property name="name" column="name"/>
 		<union-subclass name="Skiller" table="skiller">
 			<property name="skill" />
 		</union-subclass>
 		<union-subclass name="Sales" table="sales">
 			<property name="sell" />
 		</union-subclass>
 		
 	</class>	
 </hibernate-mapping> 

測試類與上面相同

資料庫結果





相關推薦

(8)hibernate繼承對映

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

淺談JavaEE中的Hibernate中的關係對映(三)

      今天我們一起來探討一下有關Hibernate四種關係對映,大家可能會有疑惑,關係對映不就是隻有三種(一對一,一對多,多對多)嗎?這裡我們再多說一個繼承對映關係,雖然它使用頻繁度沒有前三個那麼多,但是它在一些特定情況下,還是非常有用的,至於有什麼用下面馬上就要講。

Hibernate常用對映的優缺點

Hibernate三種繼承對映方式的比較  比較方面 每個具體類一張表 每個分層結構一張表 每個子類一張表 建立關係模型原則 每個具體類對應一張表,有多少具體類就需要建立多少個獨立的表 描述一個繼承關係只用一張表,也就是說子類所使用的表與父類

Hibernate學習(3) (繼承對映,配置檔案和註解版)

這篇blog準備寫怎樣在Hibernate中反應記憶體物件之間的繼承關係.我們知道,記憶體物件之間是可以有繼承關係的,但是在資料庫中,我們繼承神馬的都是浮雲,不存在的.那麼怎麼辦呢?Hibernate提供了繼承關係對映!(其實就是幫你把原來的一個類以一種特定的方

Hibernate支援三基本的繼承對映策略:

Hibernate支援三種基本的繼承對映策略: 1) 每個類分層結構一張表(table per class hierarchy) 將所有類綜合到一張表上,通過設定鑑別器(標記值)來區分資料。 2) 每個子類一張表(table per subclass) 有一個總表

hibernate中實體類對象的狀態

hibernate對象狀態 1、臨時狀態(transient):用new語句創建,還沒有被持久化,並且不在Session的緩存中。 標識:OID為null,沒有和Session建立關系。2、持久化狀態(persistent):已經計劃被持久化,並且加入到Session的緩存中。(為什麽說計劃:因為事務問題,是

2018年11月10日Java學習之類的特徵二:繼承extends,重寫override,private,default,protected,public訪問許可權修飾符,super關鍵字

1.類的繼承extends,舉個例子 2.子類繼承了父類,就繼承了父類的方法和屬性。 在子類中,可以使用父類中定義的方法和屬性,也可以建立新的資料和方法。 3.子類不能直接訪問父類中私有的(private)的成員變數和方法。 4.Java只支援單繼承,不允許

Java程式設計師從笨鳥到菜鳥之(五十)細談Hibernate(五)Hibernate一對多關係對映

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!                       前幾篇系列部落格:           在前幾篇部落格,我們初步對Hibernate有了一定的基礎性的認知了,也能夠簡單的用hibernate進行

Hibernate方式進行對映配置

hibernate.cfg.xml檔案如下: <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC         "-//Hibernate/Hib

Hibernate: 三狀態和CRUD操作

本篇部落格是初學hibernate時筆記總結,主要總結hibernate的三種狀態和hibernate的CRUD操作。 1. hibernate的三種狀態: Transient State : 瞬時狀態; Persistent State : 持久狀態

hibernate的懶載入的解決方式

懶載入的產生原因: 當使用hibernate查詢一個物件的時候,如果Session關閉,在呼叫該物件關聯的集合或者物件的時候,會出現懶載入異常 解決方案(以使用者和角色為例): 方案一: 在session關閉之前,查詢物件關聯的集合或者物件,所有在業務層的方法上新增 pu

java之中的訪問許可權和子類如何繼承父類特性

Public:對所有類可見 Protected:對同一包中的類,和子類可見 Private:僅對類本身可見         Default:對同一包中的類可見 為了理解方便,可見的意思也就是可以使用這個特性(域,方法,類),對子類可見就是子類也具有這些特性。但是繼承的時候,

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

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

Hibernate 繼承對映

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

VC ANSI環境下按行讀取ANSI、UNICODE 、UNICODE big endian、UTF-8文字檔案

1.問題提出 MFC提供的檔案類CStdioFile,其中一個函式ReadString實現了檔案的按行讀取,但是不能滿足不同型別的文字檔案的按行讀取,為了解決這一問題,筆者初步研究了一些編碼知識,參考了網上的一些資料,實現了CStdioFile類的擴充套件類CStdioFileEx,完成了常見文字檔案的按行讀

hibernate框架】幾集合對映

1.Set 前面我們已經用過,就不再說。2.List Group.java:package cn.edu.hpu.listMapping; import java.util.ArrayList; import java.util.List; import javax

Hibernate 繼承對映

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

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

Hibernate 學習經驗之談-()關聯對映

摘要: (待編寫)         Hibernate 是一個ORM 框架,它的重點就是物件之間的關係模型,維護物件之間的關係是hibernate 的核心內容,也是這個框架中相對比較難的一點。如果能夠靈活地運用好這個框架,必須熟悉物件之間的聯絡。Hibernate 中的主