Hibernate進行時

          有關Hibenrate及其相關工具的主頁
          隨筆 - 0, 文章 - 16, 評論 - 29, 引用 - 0
          數據加載中……

          多對一關系中的代理

          假設Student對Team是多對一的關系,并且<many-to-one>采取的是默認的加載策略(也即proxy)。那么,在session中取得Student后,在session外通過Student取出Team會發生什么情況呢?分三種情況討論:
          1.student記錄對應的team_id為null。注意:是為null,而不是為""。下面為student表情況:
          id??????????????????? stuName????????????? age???????????????? team_id
          123abc????????????tom?????????????????????24?????????????????? null
          這個時候調用:
          log.info(stu.getTeam())打印的是“null”。

          2. student記錄對應的team_id有值,但這個值并沒有對應到任何的實體team,比如隨便給team_id設一個值“abcd123adfsdaf”。
          id??????????????????? stuName????????????? age???????????????? team_id
          123abc????????????tom?????????????????????24?????????????????? abcd123adfsdaf
          這個時候調用:
          log.info(stu.getTeam())
          彈出異常:“could not initialize proxy - the owning Session was closed”

          log.info(stu.getTeam().getClass())
          打印的是“class com.model.Team$$EnhancerByCGLIB$$ee64f4f1”。

          log.info(stu.getTeam().getId())
          打印的是“abcd123adfsdaf”

          log.info(stu.getTeam().getTeamName())
          彈出異常:“could not initialize proxy - the owning Session was closed”

          3. student記錄對應的team_id有值,而且這個值對應到了一個實體team。
          id??????????????????? stuName????????????? age???????????????? team_id
          123abc????????????tom?????????????????????24?????????????????? 402821f90cae6c2b010cae6c31f90001
          這個時候調用:
          log.info(stu.getTeam())
          彈出異常:“could not initialize proxy - the owning Session was closed”

          log.info(stu.getTeam().getClass())
          打印的是“class com.model.Team$$EnhancerByCGLIB$$ee64f4f1”。

          log.info(stu.getTeam().getId())
          打印的是“402821f90cae6581010cae6588880001”

          log.info(stu.getTeam().getTeamName())
          彈出異常:“could not initialize proxy - the owning Session was closed”


          從上可以看到第2和第三種情況的測試結果是完全一樣的,具體的原因比較簡單,在此就不再多說。
          不過有的時候“多對一”的“一”這端可以為null,因此就可以用以下的語句判斷:
          if(student.getTeam()==null)
          ???log.info(“team為null”);
          else{
          ???Hibernate.initialize(student.getTeam());//這段代碼是偽碼,我只是想表達這個意思。
          ???log.info(student.getTeam().getTeamName());
          }
          ?


          posted on 2006-07-27 13:49 caixuetao 閱讀(433) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 余干县| 出国| 苏尼特右旗| 潞城市| 新营市| 十堰市| 南汇区| 小金县| 新巴尔虎右旗| 仁布县| 永清县| 泗水县| 微山县| 渝北区| 周口市| 炉霍县| 长沙市| 清丰县| 英山县| 九台市| 朝阳县| 察隅县| 中山市| 盖州市| 桑日县| 博兴县| 锡林郭勒盟| 垣曲县| 雷波县| 虹口区| 潼南县| 北宁市| 平度市| 阿合奇县| 东山县| 璧山县| 江永县| 习水县| 子长县| 加查县| 靖远县|