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

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

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

    Duran's technical life
    踏踏實實學技術,認認真真做研究。

    Hibernate一對一關聯實用介紹

    #0
    書和文檔上寫的都不是特清楚的。自己記下來。

    #1 Using a PK association

    #1.1 POJO with XDolclet annotation
    public class Customer {
     /**
      * @return Returns the shoppingCart.
      * @hibernate.many-to-one cascade="delete" column="shopping_cart_id"
      *  unique="true" foreign-key="FK_SHOPPING_CART__CUSTOMER"
      */
     public ShoppingCart getShoppingCart() {
      return shoppingCart;
     }
    }

    public class ShoppingCart {
     /**
      * @return Returns the customer.
      * @hibernate.one-to-one property-ref="shoppingCart"
      */
     public Customer getCustomer() {
      return customer;
     }
    }

    property-ref="shoppingCart" 告訴Hibernate ShoppingCart#customer和Customer#shoppingCart是反向的關系。所以Hibernate知道如何從ShoppingCart#getCustomer中檢索到相應的customer對象。取出某個Customer對象時,Hibernate會生成DEBUG SQL:324 - 3中的SQL語句。

    #1.2 HBM
    Customer.hbm.xml
    <many-to-one
        name="shoppingCart"
        class="ShoppingCart"
        cascade="delete"
        outer-join="auto"
        foreign-key="FK_SHOPPING_CART__CUSTOMER"
        column="shopping_cart_id"
    />

    ShoppingCart.hbm.xml
    <one-to-one
        name="customer"
        class="Customer"
        cascade="none"
        outer-join="auto"
        constrained="false"
        property-ref="shoppingCart"
    />

    #1.3 SCHEMA SQL
    create table CUSTOMER (
        ID bigint generated by default as identity (start with 1),
        SHOPPING_CART_ID bigint,
        primary key (ID)
    )

    create table SHOPPING_CART (
        ID bigint generated by default as identity (start with 1)
        primary key (ID)
    )

    alter table CUSTOMER
        add constraint FK_SHOPPING_CART__CUSTOMER
        foreign key (SHOPPING_CART_ID)
        references SHOPPING_CART

    #1.4 Query SQL
    DEBUG SQL:324 - 1
    select customer0_.ID as ID, customer0_.SHOPPING_CART_ID as SHOPPING2_3_, customer0_.USERNAME as USERNAME3_, customer0_.PWD as PWD3_
    from CUSTOMER customer0_
    where customer0_.USERNAME=? and customer0_.PWD=?

    DEBUG SQL:324 - 2
    select shoppingca0_.ID as ID0_, shoppingca0_.TOTAL as TOTAL8_0_
    from SHOPPING_CART shoppingca0_
    where shoppingca0_.ID=?

    DEBUG SQL:324 - 3
    select customer0_.ID as ID1_, customer0_.SHOPPING_CART_ID as SHOPPING2_3_1_, customer0_.USERNAME as USERNAME3_1_, customer0_.PWD as PWD3_1_, shoppingca1_.ID as ID0_, shoppingca1_.TOTAL as TOTAL8_0_
    from
     CUSTOMER customer0_
     left outer join
     SHOPPING_CART shoppingca1_
     on customer0_.SHOPPING_CART_ID=shoppingca1_.ID
    where customer0_.SHOPPING_CART_ID=?


    #2 Using a FK association

    #2.1 POJO with XDolclet annotation
    public class Customer {
     /**
      * @return Returns the shoppingCart.
      * @hibernate.one-to-one cascade="delete"
      */
     public ShoppingCart getShoppingCart() {
      return shoppingCart;
     }
    }

    public class ShoppingCart {
     /**
      * @return Returns the id.
      * @hibernate.id generator-class="foreign"
      * @hibernate.generator-param name="property" value="customer"
      */
     public Long getId() {
      return id();
     }

     /**
      * @return Returns the customer.
      * @hibernate.one-to-one constrained="true" foreign-key="FK_CUSTOMER__SHOPPING_CART"
      */
     public Customer getCustomer() {
      return customer;
     }
    }

    constrained="true" 告訴Hibernate ShoppingCart的PK還應該是一個FK,這個FK引用Customer的PK。還需要多做一點工作,聲明ShoppingCart的PK生成策略是foreign,對應ShoppingCart#customer。這和上面一句話不是一個意思嘛,FT~~

    #2.2 HBM
    Customer.hbm.xml
    <one-to-one
        name="shoppingCart"
        class="ShoppingCart"
        cascade="delete"
        outer-join="auto"
        constrained="false"
    />

    ShoppingCart.hbm.xml
    <id
        name="id"
        column="id"
        type="java.lang.Long"
    >
        <generator class="foreign">
     <param name="property">customer</param>
        </generator>
    </id>

    <one-to-one
        name="customer"
        class="Customer"
        cascade="none"
        outer-join="auto"
        constrained="true"
    />

    #2.3 SCHEMA SQL
    create table CUSTOMER (
        ID bigint generated by default as identity (start with 1),
        primary key (ID)
    )

    create table SHOPPING_CART (
        ID bigint not null,
        TOTAL integer,
        primary key (ID)
    )

    alter table SHOPPING_CART
        add constraint FK_CUSTOMER__SHOPPING_CART
        foreign key (ID)
        references CUSTOMER

    #2.4 Query SQL
    DEBUG SQL:324 -
    select customer0_.ID as ID, customer0_.USERNAME as USERNAME3_, customer0_.PWD as PWD3_
    from CUSTOMER customer0_
    where customer0_.USERNAME=? and customer0_.PWD=?

    DEBUG SQL:324 -
    select shoppingca0_.ID as ID0_, shoppingca0_.TOTAL as TOTAL8_0_
    from SHOPPING_CART shoppingca0_
    where shoppingca0_.ID=?

    這個“真正”的one-to-one的好處是少條關聯SQL語句,看到了嗎?

    posted on 2005-09-06 13:16 Duran's technical life 閱讀(4207) 評論(2)  編輯  收藏 所屬分類: 技術積累
    Comments
    • # re: Hibernate一對一關聯實用介紹
      liu
      Posted @ 2005-12-27 16:23
      有點亂,能不能加個標題?  回復  更多評論   
    • # re: Hibernate一對一關聯實用介紹
      Jun Tsai
      Posted @ 2006-01-04 15:26
      對HIbernate3.1好像不行吧  回復  更多評論   
     
    主站蜘蛛池模板: 成人免费夜片在线观看| 成全视频在线观看免费| 免费人成视频在线| 亚洲日本香蕉视频| 91禁漫免费进入| 99精品免费观看| 中文字幕日本人妻久久久免费| 精品亚洲成α人无码成α在线观看| 精品久久久久久亚洲综合网| 国产免费av片在线播放| 亚洲高清毛片一区二区| 国产精品另类激情久久久免费| 久久精品国产亚洲AV| 亚洲国产精品尤物YW在线观看| 一区二区免费在线观看| 久久国产乱子伦精品免费午夜| 在线a亚洲v天堂网2019无码| 97在线视频免费公开视频| 久久久亚洲精品视频| 一区二区三区福利视频免费观看| 亚洲一区中文字幕久久| 成年免费大片黄在线观看岛国| 亚洲性色AV日韩在线观看| 亚洲综合在线一区二区三区| 全部免费国产潢色一级| 国产一区二区三区免费观在线| 亚洲精品国产成人专区| 青青草免费在线视频| 最新亚洲人成无码网www电影| 色噜噜AV亚洲色一区二区| 亚洲人成影院在线高清| 国产成人精品男人免费| 久久九九免费高清视频| 亚洲人成高清在线播放| 免费大片av手机看片高清| 久久久亚洲精品视频| 日韩在线天堂免费观看| 永久免费AV无码网站国产 | jizz免费在线影视观看网站| 国产亚洲无线码一区二区 | 亚洲AV午夜成人片|