Hibernate中的lazy屬性總結(jié)

這篇文章主要介紹“Hibernate中的lazy屬性總結(jié)”,在日常操作中,相信很多人在Hibernate中的lazy屬性總結(jié)問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Hibernate中的lazy屬性總結(jié)”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到灌南網(wǎng)站設(shè)計(jì)與灌南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋灌南地區(qū)。

一對(duì)多情況下讀取父類的子集合時(shí),hibernate的lazy屬性在其中的影響進(jìn)行總結(jié)。(以下代碼運(yùn)行在jdk1.5,jboss eclipse ide 1.5,hibernate 3.1環(huán)境下)

假設(shè)有:父類 Person   (含有Set類型屬性Address),子類 Address(碰巧集合的名字和子類的名字都是Address,不要混淆了)Person.hbm.xml   主要片段:

< id name="idx"  column="idx"  type="long">   < generator class="identity"/> < /id>  < property  name="age"  type="int" update="true" insert="true"column="age"/> < property  name="name"  type="java.lang.String" update="true"insert="true"  column="name"/>  < set name="address" table="address"  lazy="true"  cascade="none"  sort="unsorted"> < key > < column name="personidx"/> < /key> < one-to-many class="com.abc.common.pojo.Address"/>  < /set>

在session 的周期內(nèi),無(wú)論hibernate的lazy屬性設(shè)為true or false, 不會(huì)有任何限制。訪問(wèn)父子數(shù)據(jù)的代碼如下所示 :      

  //打開(kāi)session      session = HibernateUtil.currentSession();     PersonDAO dao = new PersonDAO();    Person person = null;     person = (Person)dao.findByPrimaryKey(4);    Set addressSet = person.getAddress();    Address[] addressAry = new Address[addressSet.size()];   Address address = null ;   addressSet.toArray(addressAry);    for(int i=0 ;i< addressAry.length;i++){                   ................          }  //session關(guān)閉   session.close();    if (session.isOpen()){         HibernateUtil.closeSession();   }

(2)在session的周期外,訪問(wèn)父子數(shù)據(jù)的代碼如下所示 :

 //打開(kāi)session     session = HibernateUtil.currentSession();    PersonDAO dao = new PersonDAO();   Person person = null;    person = (Person)dao.findByPrimaryKey(4);    session.close();    //session關(guān)閉之后才訪問(wèn)person的子集   Set addressSet = person.getAddress();   Address[] addressAry = new Address[addressSet.size()];  Address address = null ;  addressSet.toArray(addressAry);   for(int i=0 ;i< addressAry.length;i++){                  ................         }   if (session.isOpen()){        HibernateUtil.closeSession();  }

此時(shí),上述代碼的運(yùn)行結(jié)果根據(jù)hibernate的lazy屬性的設(shè)置的不同而不同

lazy=false

結(jié)果:可以訪問(wèn)得到Person和Address的數(shù)據(jù)

lazy= true

根據(jù)代碼的寫(xiě)法有不同

(1)代碼其他處不做任何處理,則拋出異常

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:

(2)如果做一些處理如下,將上述那段代碼中的"留待后續(xù)處理"換成以下代碼

Hibernate.initialize(person.getAddress());   則可以訪問(wèn)得到Person和Address的數(shù)據(jù)

實(shí)際編寫(xiě)時(shí),不會(huì)象上述這樣的寫(xiě)法,即將

Hibernate.initialize(person.getAddress());和person.getAddress()在同一個(gè)方法里面調(diào)用。他們往往出現(xiàn)在應(yīng)用程序的不同層次中(前者出現(xiàn)在DAO層居多,而后者則出現(xiàn)在web層居多).

到此,關(guān)于“Hibernate中的lazy屬性總結(jié)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

當(dāng)前題目:Hibernate中的lazy屬性總結(jié)
鏈接分享:http://muchs.cn/article4/pidpie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司商城網(wǎng)站、響應(yīng)式網(wǎng)站、虛擬主機(jī)、小程序開(kāi)發(fā)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)