日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Hibernate的lazy屬性總結(jié)

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

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了尤溪免費(fèi)建站歡迎大家使用!

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

 
 
 
  1. < id name="idx"  column="idx"  type="long">
  2.  < generator class="identity"/>
  3. < /id>
  4. < property  name="age"  type="int" update="true" insert="true"column="age"/>
  5. < property  name="name"  type="java.lang.String" update="true"insert="true"
  6. column="name"/>
  7. < set name="address" table="address"  lazy="true"  cascade="none"  sort="unsorted">
  8. < key >
  9. < column name="personidx"/>
  10. < /key>
  11. < one-to-many class="com.abc.common.pojo.Address"/>
  12. < /set>

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

 
 
 
  1.   //打開session  
  2.   session = HibernateUtil.currentSession();
  3.   PersonDAO dao = new PersonDAO();
  4.   Person person = null;
  5.   person = (Person)dao.findByPrimaryKey(4);
  6.   Set addressSet = person.getAddress();
  7.  Address[] addressAry = new Address[addressSet.size()];
  8.  Address address = null ;
  9.  addressSet.toArray(addressAry);
  10.  for(int i=0 ;i< addressAry.length;i++){
  11.                  ................      
  12.   }
  13. //session關(guān)閉
  14.  session.close();
  15.   if (session.isOpen()){
  16.        HibernateUtil.closeSession();
  17.  }

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

 
 
 
  1.  //打開session  
  2.  session = HibernateUtil.currentSession();
  3.  PersonDAO dao = new PersonDAO();
  4.  Person person = null;
  5.  person = (Person)dao.findByPrimaryKey(4);
  6.  session.close();
  7.  //session關(guān)閉之后才訪問(wèn)person的子集
  8.  Set addressSet = person.getAddress();
  9. Address[] addressAry = new Address[addressSet.size()];
  10. Address address = null ;
  11. addressSet.toArray(addressAry);
  12. for(int i=0 ;i< addressAry.length;i++){
  13.                 ................      
  14.  }
  15.  if (session.isOpen()){
  16.       HibernateUtil.closeSession();
  17. }

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

lazy=false

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

lazy= true

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

 (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í)際編寫時(shí),不會(huì)象上述這樣的寫法,即將

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


當(dāng)前文章:Hibernate的lazy屬性總結(jié)
網(wǎng)頁(yè)網(wǎng)址:http://m.5511xx.com/article/cdpcjdo.html