<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    想飛就別怕摔

    大爺的并TM罵人

    Hibernate學習(七)---【繼承映射--每棵繼承樹映射成一張表】

     每棵繼承樹映射成一張表

    1、理解如何映射
      因為類繼承樹肯定是對應多個類,要把多個類的信息存放在一張表中,必須有某種機制來區分哪些記錄是屬于哪個類的。
     這種機制就是,在表中添加一個字段,用這個字段的值來進行區分。用hibernate實現這種策略的時候,有如下步驟:
     父類用普通的<class>標簽定義
     在父類中定義一個discriminator,即指定這個區分的字段的名稱和類型
     如:<discriminator column=”XXX” type=”string”/>
     子類使用<subclass>標簽定義,在定義subclass的時候,需要注意如下幾點:
     Subclass標簽的name屬性是子類的全路徑名
     在Subclass標簽中,用discriminator-value屬性來標明本子類的discriminator字段(用來區分不同類的字段)
     的值Subclass標簽,既可以被class標簽所包含(這種包含關系正是表明了類之間的繼承關系),也可以與class標
     簽平行。 當subclass標簽的定義與class標簽平行的時候,需要在subclass標簽中,添加extends屬性,里面的值
     是父類的全路徑名稱。子類的其它屬性,像普通類一樣,定義在subclass標簽的內部。

    2、理解如何存儲
     存儲的時候hibernate會自動將鑒別字段值插入到數據庫中,在加載數據的時候,hibernate能根據這個鑒別值
     正確的加載對象
     
    多態查詢:在hibernate加載數據的時候能鑒別出正真的類型(instanceOf)

    get支持多態查詢
    load只有在lazy=false,才支持多態查詢
    hql支持多態查詢 

    package com.bjsxt.hibernate;

    public class Animal {
        
        
    private int id;
        
        
    private String name;
        
        
    private boolean sex;

        
    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;
        }

        
    public boolean isSex() {
            
    return sex;
        }

        
    public void setSex(boolean sex) {
            
    this.sex = sex;
        }
    }

     

    package com.bjsxt.hibernate;

    public class Bird extends Animal {

        
    private int height;

        
    public int getHeight() {
            
    return height;
        }

        
    public void setHeight(int height) {
            
    this.height = height;
        }
    }

     

    package com.bjsxt.hibernate;

    public class Pig extends Animal {
        
        
    private int weight;

        
    public int getWeight() {
            
    return weight;
        }

        
    public void setWeight(int weight) {
            
    this.weight = weight;
        }
    }

     

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
    >
    <hibernate-mapping package="com.bjsxt.hibernate">
        
    <class name="Animal" table="t_animal" lazy="false">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <discriminator column="type" type="string"/>
            
    <property name="name"/>
            
    <property name="sex"/>
            
    <subclass name="Pig" discriminator-value="P">
                
    <property name="weight"/>
            
    </subclass>
            
    <subclass name="Bird" discriminator-value="B">
                
    <property name="height"/>
            
    </subclass>
        
    </class>
    </hibernate-mapping>

    package com.bjsxt.hibernate;

    import java.util.Iterator;
    import java.util.List;

    import org.hibernate.Session;

    import junit.framework.TestCase;

    public class ExtendsTest extends TestCase {

        
    public void testSave1() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
                
                Pig pig 
    = new Pig();
                pig.setName(
    "豬豬");
                pig.setSex(
    true);
                pig.setWeight(
    100);
                session.save(pig);
                
                Bird bird 
    = new Bird();
                bird.setName(
    "鳥鳥");
                bird.setSex(
    false);
                bird.setHeight(
    50);
                session.save(bird);
                
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }    
        
        
    /**
         * 采用load,通過Pig查詢
         
    */
        
    public void testLoad1() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
                
                Pig pig 
    = (Pig)session.load(Pig.class1);
                System.out.println(pig.getName());
                
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }
        
        
    /**
         * 采用load,通過Animal查詢
         
    */
        
    public void testLoad2() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
                
                Animal animal 
    = (Animal)session.load(Animal.class1);
                System.out.println(animal.getName());
                
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }            
        
        
    /**
         * 采用load,通過Animal查詢
         
    */
        
    public void testLoad3() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
                
                Animal animal 
    = (Animal)session.load(Animal.class1);
                
                
    //因為load默認只是lazy,因為我們看到的是Animal的代理對象
                
    //所以通過instanceof是反應不出正真的對象類型的
                
    //因此load在默認情況下是不支持多態查詢的
                if (animal instanceof Pig) {
                    System.out.println(animal.getName());
                }
    else {
                    System.out.println(
    "不是豬");
                }
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }            
        
        
    /**
         * 采用load,通過Animal查詢,將<class>標簽上的lazy=false
         
    */
        
    public void testLoad4() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
                
                Animal animal 
    = (Animal)session.load(Animal.class1);
                
    //可以正確的判斷出Pig的類型,因為lazy=false,返回的是具體的Pig類型
                
    //此時load支持多態查詢
                if (animal instanceof Pig) {
                    System.out.println(animal.getName());
                }
    else {
                    System.out.println(
    "不是豬");
                }
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }        
        
        
    /**
         * 采用get,通過Animal查詢
         
    */
        
    public void testLoad5() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
                
                
    //可以正確的判斷出Pig的類型,因為返回的是具體的Pig類型
                
    //get支持多態查詢
                Animal animal = (Animal)session.get(Animal.class1);

                
    if (animal instanceof Pig) {
                    System.out.println(animal.getName());
                }
    else {
                    System.out.println(
    "不是豬");
                }
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }    
        
        
    /**
         * 采用get,通過Animal查詢
         
    */
        
    public void testLoad6() {
            Session session 
    = null;
            
    try {
                session 
    = HibernateUtils.getSession();
                session.beginTransaction();
    //            List animalList = session.createQuery("from Animal").list();
    //            for (Iterator iter = animalList.iterator(); iter.hasNext();) {
    //                Animal a = (Animal)iter.next();
    //                //能夠正確的鑒別出正真的類型,hql是支持多態查詢的
    //                if (a instanceof Pig) {
    //                    System.out.println("是Pig");
    //                }else if (a instanceof Bird) {
    //                    System.out.println("是bird");
    //                } 
    //            }
                
                List list 
    = session.createQuery("from java.lang.Object").list();
                
    for (Iterator iter=list.iterator(); iter.hasNext();) {
                    Object o 
    = iter.next();
                    
    if (o instanceof Pig) {
                        System.out.println(
    "是Pig");
                    }
    else if (o instanceof Bird) {
                        System.out.println(
    "是bird");
                    } 
                }
                session.getTransaction().commit();
            }
    catch(Exception e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally {
                HibernateUtils.closeSession(session);
            }
        }    
        
    }

    posted on 2009-11-01 18:45 生命的綻放 閱讀(322) 評論(0)  編輯  收藏 所屬分類: Hibernate

    <2009年11月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統計

    常用鏈接

    留言簿(5)

    隨筆分類(94)

    隨筆檔案(93)

    文章分類(5)

    文章檔案(5)

    相冊

    JAVA之橋

    SQL之音

    兄弟之窗

    常用工具下載

    積分與排名

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 精品特级一级毛片免费观看| 亚洲喷奶水中文字幕电影| 国产成人综合亚洲绿色| 国产精品高清全国免费观看| 亚洲无人区码一二三码区别图片| 日韩一区二区a片免费观看| 亚洲人成影院77777| 国产成人A在线观看视频免费| 亚洲日本国产综合高清| 成人免费无遮挡无码黄漫视频| 亚洲AV永久无码精品一福利| 日韩中文无码有码免费视频| 狼色精品人妻在线视频免费| 中文字幕亚洲第一| 99久久国产免费中文无字幕| 亚洲fuli在线观看| 国产又长又粗又爽免费视频| 日本高清不卡中文字幕免费 | 免费看搞黄视频网站| 久久亚洲AV无码精品色午夜麻豆| 免费观看国产网址你懂的| 亚洲中文字幕AV每天更新| 国产成人免费网站在线观看| 99久久99这里只有免费的精品| 久久亚洲精品国产精品| 毛色毛片免费观看| 丁香花在线观看免费观看图片| 亚洲人成在线影院| 国产精品无码免费视频二三区| 岛国岛国免费V片在线观看| 亚洲一卡2卡3卡4卡国产网站 | 成年网在线观看免费观看网址| 亚洲乱码中文字幕久久孕妇黑人| 亚洲一级免费毛片| 男女交性无遮挡免费视频| 亚洲午夜免费视频| 可以免费观看的一级毛片| 中文字幕天天躁日日躁狠狠躁免费| 亚洲色大网站WWW永久网站| 亚洲一区二区三区偷拍女厕| 无码国产精品一区二区免费式影视|