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

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

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

    Table per subclass:

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

    數(shù)據(jù)關(guān)系圖如下:


    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(
    "電子工業(yè)");
    ????????????book1.setName(
    "Java?beginner");
    ????????????book1.setPageCount(
    501);
    ????????????
    ????????????TBook?book2?
    =?new?TBook();
    ????????????book2.setManufacturer(
    "機械工業(yè)");
    ????????????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()
    >0,?true);
    ????????????Assert.assertEquals(book2.getId().intValue()
    >0,?true);
    ????????????Assert.assertEquals(dvd1.getId().intValue()
    >0,?true);
    ????????????Assert.assertEquals(dvd2.getId().intValue()
    >0,?true);
    ????????}?
    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-05 15:02 knowhow 閱讀(257) 評論(0)  編輯  收藏 所屬分類: ORM:Hibernate及其他
    主站蜘蛛池模板: 国产精品极品美女免费观看| 一区二区视频在线免费观看| 精品97国产免费人成视频| 无人在线观看完整免费版视频| 亚洲AV午夜福利精品一区二区| 一级特黄a大片免费| 亚洲AV无码不卡在线播放| 91成人免费观看网站| 亚洲国产高清在线精品一区| 麻豆高清免费国产一区| 久久精品国产亚洲AV电影| 5555在线播放免费播放| 亚洲A∨精品一区二区三区下载| 国产jizzjizz视频全部免费| 边摸边脱吃奶边高潮视频免费| 免费**毛片在线播放直播| 国产亚洲综合久久| 区久久AAA片69亚洲| 久久免费看少妇高潮V片特黄| 亚洲黄网站wwwwww| 成年男女免费视频网站| 精品国产日韩亚洲一区在线| 四虎亚洲国产成人久久精品| xxxxx做受大片视频免费| 亚洲沟沟美女亚洲沟沟| 永久免费观看的毛片的网站| 精品特级一级毛片免费观看| 亚洲网址在线观看| 国产亚洲AV手机在线观看| 免费看的黄色大片| 青娱分类视频精品免费2| 日韩色日韩视频亚洲网站| 亚洲一区精品中文字幕| 国产亚洲?V无码?V男人的天堂| 久9这里精品免费视频| 亚洲一区精彩视频| 亚洲Av无码乱码在线观看性色| 精品在线免费观看| 最新亚洲卡一卡二卡三新区| 一本久久综合亚洲鲁鲁五月天| 成熟女人牲交片免费观看视频|