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

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

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

    Table per class hierarchy

    前兩種方式,都要進行多表操作,這樣帶來的性能的消耗量是相當(dāng)可觀的,不利于高并發(fā)量的數(shù)據(jù)存取。
    Table per class hierarchy提供了另外一中選擇。
    實際開發(fā)中,通過冗余字段表達同類型數(shù)據(jù)是很多情況下的選擇。
    建立一個數(shù)據(jù)表T_Item包含了所有商品可能用到的字段。另外,為了區(qū)分不同的商品,還需要引入一個用于區(qū)分的字段。

    1.數(shù)據(jù)表如下圖:


    2.數(shù)據(jù)表定義sql
    use?sample;
    DROP?TABLE?T_Item;

    CREATE?TABLE?T_Item?(
    ???????id?
    INT?NOT?NULL?AUTO_INCREMENT
    ?????,?category?
    VARCHAR(10)
    ?????,?name?
    VARCHAR(50)
    ?????,?manufacturer?
    VARCHAR(50)
    ?????,?regioncode?
    VARCHAR(30)
    ?????,?pagecount?
    INT
    ?????,?
    PRIMARY?KEY?(id)
    );


    3.配置文件

    TItem.hbm.xml:
    注意,discriminator定義要緊跟在id定義之后。如果在property之后定義,會報錯誤。

    (meta*,subselect?,cache?,synchronize*,comment?,tuplizer*,(id|composite-id),discriminator?,natural-id?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,((join*,subclass*)|joined-subclass*|union-subclass*),loader?,sql-insert?,sql-update?,sql-delete?,filter*,resultset*,(query|sql-query)*)

    <?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>
    ????????
    ????????
    <discriminator?column="category"?type="string"></discriminator>
    ????????????????
    ????????
    <property?name="name"?column="name"/>
    ????????
    <property?name="manufacturer"?column="manufacturer"/>????????
    ????????
    ????????
    <subclass?name="TBook"?discriminator-value="1">
    ????????????
    <property?name="pageCount"?column="pagecount"></property>
    ????????
    </subclass>
    ????????
    ????????
    <subclass?name="TDVD"?discriminator-value="2">
    ????????????
    <property?name="regionCode"?column="regioncode"></property>
    ????????
    </subclass>????????
    ???????????????
    ????
    </class>
    </hibernate-mapping>

    4.測試代碼
    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(
    "byf");
    ????????????book1.setName(
    "Java?beginner");
    ????????????book1.setPageCount(
    501);
    ????????????
    ????????????TBook?book2?
    =?new?TBook();
    ????????????book2.setManufacturer(
    "yyy");
    ????????????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)?{
    ????????????
    //?TODO:?handle?exception
    ????????????e.printStackTrace();
    ????????????Assert.fail(e.getMessage());
    ????????????
    if(tran?!=?null)?{
    ????????????????
    try?{
    ????????????????????tran.rollback();
    ????????????????}?
    catch?(Exception?e1)?{
    ????????????????????
    //?TODO:?handle?exception
    ????????????????????e1.printStackTrace();
    ????????????????}
    ????????????}
    ????????}
    ????}
    ????

    ????
    public?void?testSelect(){
    ????????List?list?
    =?session.createQuery("?from?TBook").list();
    ????????
    ????????Iterator?it?
    =?list.iterator();
    ????????
    while?(it.hasNext())?{
    ????????????TBook?book?
    =?(TBook)it.next();
    ????????????System.out.println(book.getName());????????????
    ????????}
    ????????
    ????????list?
    =?session.createQuery("?from?TDVD").list();
    ????????it?
    =?list.iterator();
    ????????
    while?(it.hasNext())?{
    ????????????TDVD?dvd?
    =?(TDVD)it.next();
    ????????????System.out.println(dvd.getName());????????????
    ????????}????????
    ????}
    }

    4.查詢結(jié)果
    posted on 2006-07-05 15:04 knowhow 閱讀(246) 評論(0)  編輯  收藏 所屬分類: ORM:Hibernate及其他
    主站蜘蛛池模板: 手机看片国产免费永久| 特级毛片免费播放| 久久久高清日本道免费观看| 2048亚洲精品国产| a级毛片免费网站| 亚洲精品成人无限看| 国产精品偷伦视频观看免费| 亚洲无线码一区二区三区| 色www永久免费| 久久久久久亚洲精品中文字幕| 人人玩人人添人人澡免费| 亚洲av中文无码乱人伦在线播放| 日本高清不卡aⅴ免费网站| 亚洲国产精品线在线观看| 最近中文字幕高清免费中文字幕mv| 亚洲二区在线视频| 日本视频免费在线| 国产精品小视频免费无限app| 亚洲色大成网站WWW久久九九| 日本免费人成网ww555在线| 亚洲乱码中文字幕小综合| 在线播放免费人成视频在线观看| 老司机午夜性生免费福利 | 亚洲情综合五月天| 免费看又黄又无码的网站| 亚洲av无码国产综合专区| 白白国产永久免费视频| 你懂的在线免费观看| 7777久久亚洲中文字幕| 亚洲av午夜成人片精品电影| 国产成年无码久久久免费| 亚洲免费在线视频播放| mm1313亚洲精品国产| 久久精品无码专区免费东京热 | 国产亚洲精品仙踪林在线播放| 久久久久亚洲爆乳少妇无| 猫咪免费人成网站在线观看| 亚洲乱亚洲乱妇24p| 亚洲AV午夜成人影院老师机影院| 国色精品卡一卡2卡3卡4卡免费| 一区二区三区免费在线视频|