(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.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" 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.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="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 中的主