隨筆-86  評論-33  文章-0  trackbacks-0
          EmylinkUpcode  1...................n  EmylinkUlink   一對多關(guān)系

          1.hbm.xml描述
            EmylinkUpcode.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
          "<hibernate-mapping package="hbm">
           <class name="EmylinkUpcode" table="emylink_upcode">
            <id
             name="id" type="integer" column="plink_code"
            >
             <generator class="org.hibernate.id.IncrementGenerator"/>
            </id>

            <property
             name="account"
             column="account"
             type="string"
             not-null="true"
             length="20"
            />
            <property
             name="plinkName"
             column="plink_name"
             type="string"
             not-null="true"
             length="50"
            />
            <property
             name="plinkExplain"
             column="plink_explain"
             type="string"
             not-null="false"
             length="100"
            />
            <property
             name="typeCode"
             column="type_code"
             type="string"
             not-null="false"
             length="8"
            />
           
            <set name="emylinkUlinks" inverse="true" lazy="true"  cascade="all"
                 <key column="plink_code"/>
                <one-to-many class="EmylinkUlink"/>
            </set>

           </class> 
          </hibernate-mapping>

          操作級聯(lián)(cascade)關(guān)系。
          可選值:
          all : 所有情況下均進(jìn)行級聯(lián)操作。
          none:所有情況下均不進(jìn)行級聯(lián)操作。
          save
          -update:在執(zhí)行save-update時
          進(jìn)行級聯(lián)操作。
          delete:在執(zhí)行delete時進(jìn)行級聯(lián)操作。

           EmylinkUlink.hbm.xml

          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD//EN"
           "

          <hibernate-mapping package="hbm">
           <class
            name="EmylinkUlink"
            table="emylink_ulink"
           >
            <id
             name="id"
             type="integer"
             column="id"
            >
             <generator class="org.hibernate.id.IncrementGenerator"/>
            </id>

            <property
             name="account"
             column="account"
             type="string"
             not-null="true"
             length="20"
            />
            <property
             name="link"
             column="link"
             type="string"
             not-null="true"
             length="200"
            />
            <property
             name="linkName"
             column="link_name"
             type="string"
             not-null="true"
             length="20"
            />
            <property
             name="explain"
             column="explain"
             type="string"
             not-null="false"
             length="500"
            />
            <property
             name="indate"
             column="indate"
             type="date"
             not-null="true"
             length="16"
             insert="false"                //不參與插入操作
             update="false"             //不參與更新操作
            />
            <property
             name="sort"
             column="sort"
             type="string"
             not-null="false"
             length="3"
            />
            <property
             name="private"
             column="private"
             type="string"
             not-null="false"
             length="1"
            />
            <many-to-one
             name="plinkCode"
             column="plink_code"
             class="EmylinkUpcode"
             not-null="true"
            >
            </many-to-one>
           </class> 
          </hibernate-mapping>


          2.POJO對象
            EmylinkUpcode.java
          //
              
          // primary key
              private java.lang.Integer id;

              
          // fields
              private java.lang.String account;
              
          private java.lang.String plinkName;
              
          private java.lang.String plinkExplain;
              
          private java.lang.String typeCode;

              
          // collections
              private java.util.Set<hbm.EmylinkUlink> emylinkUlinks;

          //

            EmylinkUlink.java
          //
          private int hashCode = Integer.MIN_VALUE;

              
          // primary key
              private java.lang.Integer id;

              
          // fields
              private java.lang.String account;
              
          private java.lang.String link;
              
          private java.lang.String linkName;
              
          private java.lang.String explain;
              
          private java.util.Date indate;
              
          private java.lang.String sort;
              
          private java.lang.String m_private;

              
          // many to one
              private hbm.EmylinkUpcode plinkCode;
          //

          通過EmylinkUpcode加載EmylinkUlink(注意EmylinkUpcode.hbm.xml中聲明了延遲加載)
          Session session = EmylinkSessionFactory.currentSession();
                   Query q 
          = session.createQuery("from EmylinkUpcode where account='derek'");
                          List l 
          = q.list();
                         
                             EmylinkUpcode eu 
          =  (EmylinkUpcode)l.get(0);
                             System.out.println(eu.getPlinkName());
                             
          //Hibernate.initialize(eu.getEmylinkUlinks());//當(dāng)延遲加載lazy=true時,強(qiáng)制加載及聯(lián)對象
                             
                             Set ul 
          = eu.getEmylinkUlinks(); 
                                               
                             Iterator
          <EmylinkUlink> it = ul.iterator();//lazy=true并且不使用強(qiáng)制加載,則此時才真真及聯(lián)加載
                             
                             
          while(it.hasNext()){
                              System.out.println(it.next().getLinkName());
                             }
           EmylinkSessionFactory.closeSession();  

          * 延遲加載   
             如果lazy=true(延遲加載), 加載EmylinkUpcode時,hibernate不會立即加載EmylinkUlink,只有當(dāng)(Iterator<EmylinkUlink> it = ul.iterator();)執(zhí)行時,hibernate才加載EmylinkUlink實(shí)例; 如果在加載前就關(guān)閉session,則報(bào)異常LazyInitializationException ; 可以使用Hibernate.initialize(Object o)強(qiáng)制及聯(lián)加載

          *J2SE5.0的泛型

          public void setEmylinkUlinks (java.util.Set<hbm.EmylinkUlink> emylinkUlinks) {
                  
          this.emylinkUlinks = emylinkUlinks;
              }
          Iterator<EmylinkUlink> it = ul.iterator();                   
                             
          while(it.hasNext()){
                              EmylinkUlink el 
          = it.next();//無需進(jìn)行強(qiáng)制類型轉(zhuǎn)換
                              System.out.println(el.getLinkName());
                             }

          emylinkUlinks集合中只能存放EmylinkUlink對象,從集合中獲取對象無需再類型轉(zhuǎn)換
           
          struts+spring+hibernate關(guān)于hibernate中l(wèi)azy="true"的問題。web.xml中用   

                    <filter>   
                            
          <filter-name>openSessionInViewFilter</filter-name>   
                            
          <filter-class>org.springframework.orm.hibernate.support.OpenSessionInViewFilter</filter-class>   
                    
          </filter>   
              
                    
          <filter-mapping>   
                            
          <filter-name>openSessionInViewFilter</filter-name>   
                            
          <url-pattern>*.do</url-pattern>   
                    
          </filter-mapping>

            它的原理就是:打開頁面的時候打開session,一直到頁面裝載完畢才關(guān)閉session,這樣就解決了lazy="true"時session   is   closed的問題。
            關(guān)于OpenSessionInViewFilter 延遲加載失效問題
          http://www.javaeye.com/topic/15057
                    OpenSessionInView的效率問題  http://www.javaeye.com/topic/17501

          posted on 2006-09-07 16:20 Derek.Guo 閱讀(4330) 評論(0)  編輯  收藏 所屬分類: Java
          MSN:envoydada@hotmail.com QQ:34935442
          主站蜘蛛池模板: 马尔康县| 高陵县| 攀枝花市| 油尖旺区| 焦作市| 桓台县| 南溪县| 离岛区| 阿合奇县| 宁夏| 酉阳| 沧州市| 临洮县| 海南省| 祁门县| 太仆寺旗| 富民县| 怀宁县| 正定县| 汝州市| 历史| 璧山县| 外汇| 绥棱县| 龙门县| 山丹县| 宝应县| 犍为县| 昌黎县| 浙江省| 莱西市| 上饶市| 彭州市| 金沙县| 永福县| 宾阳县| 桦川县| 吉水县| 通河县| 青龙| 扶沟县|