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

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

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

    posts - 28,comments - 3,trackbacks - 0
    Hibernate3允許你使用手寫的sql來完成所有的create,update,delete,和load操作(包括存儲過程)    
       
      使用存儲過程來查詢  
      Hibernate   3引入了對存儲過程查詢的支持.   存儲過程必須返回一個結果集,作為Hibernate能夠使用的第一個外部參數.   下面是一個Oracle9和更高版本的存儲過程例子.    
       
      CREATE   OR   REPLACE   FUNCTION   selectAllEmployments    
              RETURN   SYS_REFCURSOR    
      AS    
              st_cursor   SYS_REFCURSOR;    
      BEGIN    
              OPEN   st_cursor   FOR    
        SELECT   EMPLOYEE,   EMPLOYER,    
        STARTDATE,   ENDDATE,    
        REGIONCODE,   EID,   VALUE,   CURRENCY    
        FROM   EMPLOYMENT;    
                  RETURN     st_cursor;    
        END;  
      在Hibernate里要要使用這個查詢,你需要通過命名查詢來映射它.    
       
      <sql-query   name="selectAllEmployees_SP"   callable="true">  
              <return   alias="emp"   class="Employment">  
                      <return-property   name="employee"   column="EMPLOYEE"/>  
                      <return-property   name="employer"   column="EMPLOYER"/>                          
                      <return-property   name="startDate"   column="STARTDATE"/>  
                      <return-property   name="endDate"   column="ENDDATE"/>                          
                      <return-property   name="regionCode"   column="REGIONCODE"/>                          
                      <return-property   name="id"   column="EID"/>                                                  
                      <return-property   name="salary">    
                              <return-column   name="VALUE"/>  
                              <return-column   name="CURRENCY"/>                          
                      </return-property>  
              </return>  
              {   ?   =   call   selectAllEmployments()   }  
      </sql-query>   
        
    { ? = call selectAllUsers() } 也可以寫成{ call selectAllUsers() },
    如果有參數就寫成
    { ? = call selectAllUsers(?,?,?) }
    代碼中對query設置相應位置上的值就OK

    Java調用關鍵代碼如下
          
      Session session = HibernateUtil.currentSession();
      Query query = session.getNamedQuery("selectAllUsers");
      List list = query.list();
      System.out.println(list);

    要求你的存儲過程必須能返回記錄集,否則要出錯
    如果你的存儲過程是完成非查詢任務就應該在配置文件用以下三個標簽
      <sql-insert callable="true">{call createPerson (?, ?)}</sql-insert>
      <sql-delete callable="true">{? = call deletePerson (?)}</sql-delete>
      <sql-update callable="true">{? = call updatePerson (?, ?)}</sql-update> 

      注意存儲過程當前僅僅返回標量和實體.現在不支持<return-join>和<load-collection>     
       
    使用存儲過程的規則和限制  
            為了在Hibernate中使用存儲過程,你必須遵循一些規則.不遵循這些規則的存儲過程將不可用.如果你仍然想要使用他們,   你必須通過session.connection()來執行他們.這些規則針對于不同的數據庫.因為數據庫   提供商有各種不同的存儲過程語法和語義.    
       
      對存儲過程進行的查詢無法使用setFirstResult()/setMaxResults()進行分頁。    
       
      對于Oracle有如下規則:    
       
      存儲過程必須返回一個結果集.它通過返回SYS_REFCURSOR實現(在Oracle9或10),在Oracle里你需要定義一個REF   CURSOR   類型    
       
      推薦的格式是   {   ?   =   call   procName(<parameters>)   }   或   {   ?   =   call   procName   }(這更像是Oracle規則而不是Hibernate規則)    
       
      對于Sybase或者MS   SQL   server有如下規則:    
       
      存儲過程必須返回一個結果集。.注意這些servers可能返回多個結果集以及更新的數目.Hibernate將取出第一條結果集作為它的返回值,   其他將被丟棄。    
       
      如果你能夠在存儲過程里設定SET   NOCOUNT   ON,這可能會效率更高,但這不是必需的。
    posted on 2007-05-18 08:50 李大嘴 閱讀(2567) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 免费无码成人AV片在线在线播放| 国产成人免费爽爽爽视频| 日本中文一区二区三区亚洲| 伊人久久五月丁香综合中文亚洲| 日本XXX黄区免费看| 亚洲国产日产无码精品| 100000免费啪啪18免进| 亚洲午夜电影在线观看| 99久久免费国产精品特黄| 国产精品亚洲精品| 日本不卡在线观看免费v| 羞羞的视频在线免费观看| 亚洲福利视频一区二区| 人人爽人人爽人人片av免费| 国产精品亚洲精品日韩已方| 中文字幕免费在线看线人动作大片| 亚洲色欲久久久综合网| 少妇人妻偷人精品免费视频| 亚洲国产视频一区| 最近高清国语中文在线观看免费| 久久精品国产亚洲av瑜伽| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 免费人成网站7777视频| 人人公开免费超级碰碰碰视频| 国产成人精品日本亚洲网站| 69视频在线是免费观看| 亚洲欧美日韩中文字幕一区二区三区| 免费A级毛片无码久久版| 一级A毛片免费观看久久精品| 亚洲国产精品嫩草影院在线观看| 182tv免费视视频线路一二三| 亚洲精品永久在线观看| 伊人久久大香线蕉亚洲五月天 | 亚洲精品高清国产一久久| 一本无码人妻在中文字幕免费| 国产亚洲综合精品一区二区三区| 亚洲精品无码精品mV在线观看| 皇色在线视频免费网站| 国产A∨免费精品视频| 亚洲中文字幕日本无线码| 国产乱辈通伦影片在线播放亚洲|