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

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

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

    Hibernate實體層次設計(三)

    Table per subclass:

    父類TItem單獨映射到一張主表,為子類TBook、TDVD分別單獨設立一張子表,子表中只包含子類所擴展的屬性。同時,子表通過關系型數據庫的外鍵相關聯,如下圖所示:

    數據關系圖如下:


    1.表定義sql如下
    use sample;

    DROP TABLE T_DVD;
    DROP TABLE T_Book;
    DROP TABLE T_Item;

    CREATE TABLE T_Item (
           id 
    INT NOT NULL AUTO_INCREMENT
         , name 
    VARCHAR(50)
         , manufacturer 
    VARCHAR(50)
         , 
    PRIMARY KEY (id)
    );

    CREATE TABLE T_Book (
           id 
    INT NOT NULL
         , pagecount 
    INT
         , 
    PRIMARY KEY (id)
         , 
    INDEX (id)
         , 
    CONSTRAINT FK_T_Book_1 FOREIGN KEY (id)
                      
    REFERENCES T_Item (id)
    );

    CREATE TABLE T_DVD (
           id 
    INT NOT NULL
         , regioncode 
    VARCHAR(30)
         , 
    PRIMARY KEY (id)
         , 
    INDEX (id)
         , 
    CONSTRAINT FK_T_DVD_1 FOREIGN KEY (id)
                      
    REFERENCES T_Item (id)
    );


    2.配置文件
    TItem.hbm.xml
    <?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="cn.blogjava.start">

        
    <class name="TItem" table="T_Item" catalog="sample">
            
    <id name="id" column="id">
                
    <generator class="native" />
            
    </id>
            
    <property name="name" column="name"/>
            
    <property name="manufacturer" column="manufacturer"/>        
            
            
    <joined-subclass name="TDVD" table="T_DVD" catalog="sample">
                
    <key column="id" />
                
    <property name="regionCode" column="regioncode" />
            
    </joined-subclass>
            
            
    <joined-subclass name="TBook" table="T_Book" catalog="sample">
                
    <key column="id" />
                
    <property name="pageCount" column="pagecount" />
            
    </joined-subclass>
                   
        
    </class>
    </hibernate-mapping>

    3.測試代碼。
    package cn.blogjava.start;

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

    import junit.framework.Assert;
    import junit.framework.TestCase;

    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;


    public class HibernateTest extends TestCase {
        
        Session session 
    = null;

        
    protected void setUp() {
            
    try {
                Configuration config = new Configuration().configure();
                SessionFactory sessionFactory 
    = config.buildSessionFactory();
                session 
    = sessionFactory.openSession();
                
            } 
    catch (HibernateException e) {
                e.printStackTrace();
            }        
        }

        protected void tearDown() {
            
    try {
                session.close();        
            } 
    catch (HibernateException e) {
                e.printStackTrace();
            }        
        }    
        
      
        
    public void testInsert() {
            Transaction tran 
    = null;
            
    try {
                tran 
    = session.beginTransaction();
                TBook book1 
    = new TBook();
                
                book1.setManufacturer(
    "電子工業");
                book1.setName(
    "Java beginner");
                book1.setPageCount(
    501);
                
                TBook book2 
    = new TBook();
                book2.setManufacturer(
    "機械工業");
                book2.setName(
    "Thinking in java");
                book2.setPageCount(
    1201);
                
                TDVD dvd1 
    = new TDVD();
                dvd1.setManufacturer(
    "columnibia");
                dvd1.setName(
    "Lord king");
                dvd1.setRegionCode(
    "5 area");
                
                TDVD dvd2 
    = new TDVD();
                dvd2.setManufacturer(
    "sony");
                dvd2.setName(
    "Forrest gump");
                dvd2.setRegionCode(
    "3 area");            

                session.save(book1);
                session.save(book2);
                session.save(dvd1);
                session.save(dvd2);
                session.flush();
                tran.commit();
                Assert.assertEquals(book1.getId().intValue()
    >0true);
                Assert.assertEquals(book2.getId().intValue()
    >0true);
                Assert.assertEquals(dvd1.getId().intValue()
    >0true);
                Assert.assertEquals(dvd2.getId().intValue()
    >0true);
            } 
    catch (HibernateException e) {
                e.printStackTrace();
                Assert.fail(e.getMessage());
                
    if(tran != null) {
                    
    try {
                        tran.rollback();
                    } 
    catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
        
        public void testSelect(){
            List list 
    = session.createQuery(" from TItem").list();
            
            Iterator it 
    = list.iterator();
            
    while (it.hasNext()) {
                TItem item 
    = (TItem)it.next();
                System.out.println(item.getName());
                
            }
        }
    }

    4.在HQL Scratchpad中輸入 From TItem,在Hibernate Dynamic Query Translator中觀察到如下的SQL語句:
    select
      titem0_.id 
    as id16_,
      titem0_.name 
    as name16_,
      titem0_.manufacturer 
    as manufact3_16_,
      titem0_1_.regioncode 
    as regioncode17_,
      titem0_2_.pagecount 
    as pagecount18_,
      
    case 
       
    when titem0_1_.id is not null then 1 
       
    when titem0_2_.id is not null then 2 
       
    when titem0_.id is not null then 0 
      
    end as clazz_ 
     
    from
      sample.T_Item titem0_ 
     
    left outer join
      sample.T_DVD titem0_1_ 
       
    on titem0_.id=titem0_1_.id 
     
    left outer join
      sample.T_Book titem0_2_ 
       
    on titem0_.id=titem0_2_.id

    posted on 2006-07-02 17:39 baim 閱讀(338) 評論(0)  編輯  收藏 所屬分類: 開源軟件框架

    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導航

    常用鏈接

    隨筆分類(27)

    隨筆檔案(28)

    搜索

    最新評論

    主站蜘蛛池模板: 成全在线观看免费观看大全| 又长又大又粗又硬3p免费视频 | 国产三级免费电影| 亚洲第一区精品日韩在线播放| 国产自偷亚洲精品页65页| 亚洲AV美女一区二区三区| 亚洲国产精品综合福利专区| 亚洲成在人线在线播放无码| 免费无毒a网站在线观看| 成人性做爰aaa片免费看| 国产成人免费在线| 国产精品视_精品国产免费 | 又粗又大又猛又爽免费视频| 亚洲人JIZZ日本人| 亚洲国产成人资源在线软件 | 一级特黄a免费大片| 色欲色香天天天综合网站免费| 免费看国产成年无码AV片| 亚洲国产一区视频| 亚洲色欲或者高潮影院| 老司机午夜在线视频免费| 久久精品亚洲福利| 亚洲福利电影在线观看| 小说区亚洲自拍另类| 特级无码毛片免费视频尤物| 免费无码又爽又刺激高潮| 亚洲色精品88色婷婷七月丁香| 亚洲一区二区三区免费视频 | 亚洲色丰满少妇高潮18p| 国产福利在线观看永久免费| 成人免费激情视频| 亚洲人成电影在线播放| 亚洲一级免费视频| 不卡视频免费在线观看| 最近免费中文字幕视频高清在线看| 久久精品国产精品亚洲下载| xxx毛茸茸的亚洲| 国色精品va在线观看免费视频| 女人18毛片a级毛片免费| 久久久亚洲精品国产| 国产成人高清亚洲一区久久 |