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

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

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

    blogjava's web log

    blogjava's web log
    ...

    hibernate繼承之---subclass 已更新(四)

    先看由滿江紅翻譯團隊(RedSaga Translate Team)翻譯的子類(subclass)說明,再來看我們的例子
    多態持久化需要為父類的每個子類都進行定義。對于“每一棵類繼承樹對應一個表”的策略來說,就需要使用<subclass>定義。
    <subclass
            name="ClassName"                              (1)
            discriminator-value="discriminator_value"     (2)
            proxy="ProxyInterface"                        (3)
            lazy="true|false"                             (4)
            dynamic-update="true|false"
            dynamic-insert="true|false"
            entity-name="EntityName"
            node="element-name">
            <property .... />
            .....
    </subclass>
    (1)

    name: 子類的全限定名。

    (2)

    discriminator-value(辨別標志) (可選 - 默認為類名):一個用于區分每個獨立的子類的值。

    (3)

    proxy(代理) (可選): 指定一個類或者接口,在延遲裝載時作為代理使用。

    (4)

    lazy (可選, 默認是true): 設置為 lazy="false" 禁止使用延遲抓取

    每個子類都應該定義它自己的持久化屬性和子類。 <version><id> 屬性可以從根父類繼承下來。在一棵繼承樹上的每個子類都必須定義一個唯一的discriminator-value。如果沒有指定,就會使用Java類的全限定名。

    可以在單獨的映射文件中,直接在hibernate-mapping下定義subclass,union-subclassjoined-subclass映射。這樣你只要增加一個新的映射文件就可以繼承一棵類繼承樹。你必須在子類的映射中指定extends 屬性來指定已映射的超類。注意:以前,這個特性使得映射文件的順序變得很重要。從Hibernate3開始,當使用extends關鍵字的時候,映射文件的次序便不重要了。而在單一映射文件中,依舊需要保持將超類定義在子類之前這樣的次序。

    <hibernate-mapping>
        <subclass name="DomesticCat" extends="Cat" discriminator-value="D">
             <property name="name" type="string"/>
        </subclass>
    </hibernate-mapping>

    好了。。

    開始看例子了。。

    建表
    create?table?animal
    (aid?varchar(
    32)?not?null?primary?key,
    ?atype?varchar(
    16),
    ?dname?varchar(
    16),
    ?cname?varchar(
    16)
    )

    父類
    package?com.test;

    public?class?Animal
    {
    ????
    private?String?aid;
    ???
    //geter?seter
    Cat
    package?com.test;

    public?class?Cat?extends?Animal
    {
    ????
    private?String?cname;
    ??
    //geter?seter

    Dog
    package?com.test;

    public?class?Dog?extends?Animal
    {
    ????
    private?String?dname;
    ???
    //geter?seter

    配置文件。。精華在這了.
    <?xml?version="1.0"?>
    <!DOCTYPE?hibernate-mapping
    ????PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD//EN"
    ????"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
    >

    <hibernate-mapping>

    ????
    <class?name="com.test.Animal"?table="animal">??

    ????????
    <id?name="aid"?type="string"?unsaved-value="null"?>
    ????????????
    <column?name="aid"?sql-type="char(32)"?not-null="true"/>
    ????????????
    <generator?class="uuid.hex"/>
    ????????
    </id>

    ????????
    <discriminator?column="atype"?type="string"?/>
    ????????
    ????????
    <subclass?name="com.test.Dog"?discriminator-value="dog">
    ????????????
    <property?name="dname">
    ????????????????
    <column?name="dname"?sql-type="varchar(16)"?/>
    ????????????
    </property>
    ????????
    </subclass>

    ????????
    <subclass?name="com.test.Cat"?discriminator-value="cat">
    ????????????
    <property?name="cname">
    ????????????????
    <column?name="cname"?sql-type="varchar(16)"/>
    ????????????
    </property>
    ????????
    </subclass>

    ????
    </class>

    </hibernate-mapping>

    測試類
    package?com.test;

    import?net.sf.hibernate.Session;
    import?net.sf.hibernate.SessionFactory;
    import?net.sf.hibernate.cfg.Configuration;
    import?net.sf.hibernate.*;
    import?java.sql.*;
    import?java.util.List;
    import?java.util.Iterator;

    public?class?TestInherit
    {
    ????SessionFactory?sf;
    ????Session?session;
    ????
    public?TestInherit()
    ????
    {
    ????????
    try
    ????????
    {
    ????????????Configuration?cfg?
    =?new?Configuration();
    ????????????sf?
    =?cfg.addClass(Animal.class).buildSessionFactory();
    ????????}

    ????????
    catch(HibernateException?ex)
    ????????
    {
    ????????????ex.printStackTrace();
    ????????}

    ????}

    ????
    //插入
    ????public?void?doCreate()
    ????
    {
    ????????
    try
    ????????
    {
    ????????????session?
    =?sf.openSession();

    ????????????Dog?dog?
    =?new?Dog();
    ????????????dog.setDname(
    "small?dog");
    ????????????Cat?cat?
    =?new?Cat();
    ????????????cat.setCname(
    "small?cat");
    ????????????session.save(dog);
    ????????????session.save(cat);
    ????????????session.flush();
    ????????????session.connection().commit();

    ????????}

    ????????
    catch(HibernateException?ex)
    ????????
    {
    ????????????ex.printStackTrace();
    ????????}

    ????????
    catch(SQLException?ex1)
    ????????
    {
    ????????????ex1.printStackTrace();
    ????????}

    ????????
    finally
    ????????
    {
    ????????????????
    try{
    ????????????????????session.close();
    ????????????????}

    ????????????????
    catch(HibernateException?ex2){
    ????????????????}

    ????????}


    ????}

    ????
    //查詢
    ????public?void?doQuery()
    ????
    {
    ????????
    try{
    ????????????session?
    =?sf.openSession();
    ????????????Query?q?
    =?session.createQuery("select?d?from?Dog?as?d");
    ????????????List?l?
    =?q.list();
    ????????????Dog?dog?
    =?null;
    ????????????Cat?cat?
    =?null;
    ????????????
    for(int?i=0;i<l.size();i++)
    ????????????
    {
    ????????????????dog?
    =?(Dog)l.get(i);
    ????????????????System.out.println(dog.getDname());
    ????????????}

    ????????}

    ????????
    catch(HibernateException?ex){
    ????????????ex.printStackTrace();
    ????????}

    ????????
    finally{
    ????????????
    try{
    ????????????????session.close();
    ????????????}

    ????????????
    catch(HibernateException?ex2){
    ????????????}

    ????????}

    ????}

    ????
    public?static?void?main(String[]?args)
    ????
    {
    ????????TestInherit?t?
    =?new?TestInherit();
    ????????
    //t.doCreate();
    ????????t.doQuery();
    ????}

    }


    posted on 2006-04-09 00:18 record java and net 閱讀(2247) 評論(1)  編輯  收藏 所屬分類: java

    評論

    # re: hibernate繼承之一張表---方便以后查看(四) 2006-04-09 14:17 leifei

    不錯啊。。支持。。。

    吳某人 多指點。。。

      回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲天堂视频在线观看| 亚洲国产精品无码专区在线观看| 国产成人无码a区在线观看视频免费| 亚洲人成色77777在线观看大 | 国产片免费福利片永久| 亚洲av最新在线网址| 亚洲AV永久无码精品一福利| 免费成人在线视频观看| 国产成人免费a在线资源| 亚洲精品mv在线观看| 人体大胆做受免费视频| 无码国产精品一区二区免费虚拟VR| 亚洲伊人久久综合中文成人网| 亚洲人成在线中文字幕| 99久久国产精品免费一区二区| 日本高清免费aaaaa大片视频| 2022年亚洲午夜一区二区福利| 特黄aa级毛片免费视频播放| 91精品免费国产高清在线| 亚洲一区二区三区偷拍女厕| 亚洲AV无码专区在线电影成人| 97视频免费观看2区| 中文字幕亚洲激情| 午夜亚洲WWW湿好爽| 亚洲免费视频网址| 国产亚洲av片在线观看播放| 日韩色视频一区二区三区亚洲| 免费能直接在线观看黄的视频 | 久久精品国产精品亚洲下载| 亚洲乱码av中文一区二区| 久久精品无码专区免费青青| 久久久亚洲精品蜜桃臀| 无码亚洲成a人在线观看| 中文字幕无码免费久久99| 亚洲AV乱码久久精品蜜桃| eeuss免费天堂影院| 成人免费视频小说| 亚洲成aⅴ人片在线观| 久久免费的精品国产V∧| 亚洲精品成人片在线观看精品字幕 | 国产亚洲精品VA片在线播放|