<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 11.1.1\. 操作單元(Unit of work) 首先,別用_session-per-operation_這種反模式了,也就是說,在單個線程中, 不要因為一次簡單的數據庫調用,就打開和關閉一次`Session`!數據庫事務也是如此。 應用程序中的數據庫調用是按照計劃好的次序,分組為原子的操作單元。(注意,這也意味著,應用程 序中,在單個的SQL語句發送之后,自動事務提交(auto-commit)模式失效了。這種模式專門為SQL控制臺操作設計的。 Hibernate禁止立即自動事務提交模式,或者期望應用服務器禁止立即自動事務提交模式。)數據庫事務絕不是可有可無的,任何與數據庫之間的通訊都必須在某個事務中進行,不管你是在讀還是在寫數據。對讀數據而言,應該避免auto-commit行為,因為很多小的事務比一個清晰定義的工作單元性能差。后者也更容易維護和擴展。 在多用戶的client/server應用程序中,最常用的模式是 _每個請求一個會話(session-per-request)_。 在這種模式下,來自客戶端的請求被發送到服務器端(即Hibernate持久化層運行的地方),一 個新的Hibernate `Session`被打開,并且執行這個操作單元中所有的數據庫操作。 一旦操作完成(同時對客戶端的響應也準備就緒),session被同步,然后關閉。你也可以使用單 個數據庫事務來處理客戶端請求,在你打開`Session`之后啟動事務,在你關閉 `Session`之前提交事務。會話和請求之間的關系是一對一的關系,這種模式對 于大多數應用程序來說是很棒的。 實現才是真正的挑戰。Hibernate內置了對"當前session(current session)" 的管理,用于簡化此模式。你要做的一切就是在服務器端要處理請求的時候,開啟事務,在響應發送給客戶之前結束事務。你可以用任何方式來完成這一操作,通常的方案有`ServletFilter`,在service方法中進行pointcut的AOP攔截器,或者proxy/interception容器。EJB容器是實現橫切諸如EJB session bean上的事務分界,用CMT對事務進行聲明等方面的標準手段。假若你決定使用編程式的事務分界,請參考本章后面講到的Hibernate `Transaction` API,這對易用性和代碼可移植性都有好處。 在任何時間,任何地方,你的應用代碼可以通過簡單的調用`sessionFactory.getCurrentSession()`來訪問"當前session",用于處理請求。你總是會得到當前數據庫事務范圍內的`Session`。在使用本地資源或JTA環境時,必須配置它,請參見[第 2.5 節 “上下文相關的(Contextual)Session”](../Text/pr01_split_000.html "2.5\. 上下文相關的(Contextual)Session")。 有時,將`Session`和數據庫事務的邊界延伸到"展示層被渲染后"會帶來便利。有些serlvet應用程序在對請求進行處理后,有個單獨的渲染期,這種延伸對這種程序特別有用。假若你實現你自己的攔截器,把事務邊界延伸到展示層渲染結束后非常容易。然而,假若你依賴有容器管理事務的EJB,這就不太容易了,因為事務會在EJB方法返回后結束,而那是在任何展示層渲染開始之前。請訪問Hibernate網站和論壇,你可以找到_Open Session in View_這一模式的提示和示例。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看