<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 2.5\. 上下文相關的(Contextual)Session 使用Hibernate的大多數應用程序需要某種形式的“上下文相關的” session,特定的session在整個特定的上下文范圍內始終有效。然而,對不同類型的應用程序而言,要為什么是組成這種“上下文”下一個定義通常是困難的;不同的上下文對“當前”這個概念定義了不同的范圍。在3.0版本之前,使用Hibernate的程序要么采用自行編寫的基于`ThreadLocal`的上下文session,要么采用`HibernateUtil`這樣的輔助類,要么采用第三方框架(比如Spring或Pico),它們提供了基于代理(proxy)或者基于攔截器(interception)的上下文相關session。 從3.0.1版本開始,Hibernate增加了`SessionFactory.getCurrentSession()`方法。一開始,它假定了采用`JTA`事務,`JTA`事務定義了當前session的范圍和上下文(scope and context)。Hibernate開發團隊堅信,因為有好幾個獨立的`JTA TransactionManager`實現穩定可用,不論是否被部署到一個`J2EE`容器中,大多數(假若不是所有的)應用程序都應該采用`JTA`事務管理。基于這一點,采用`JTA`的上下文相關session可以滿足你一切需要。 更好的是,從3.1開始,`SessionFactory.getCurrentSession()`的后臺實現是可拔插的。因此,我們引入了新的擴展接口(`org.hibernate.context.CurrentSessionContext`)和新的配置參數(`hibernate.current_session_context_class`),以便對什么是“當前session”的范圍和上下文(scope and context)的定義進行拔插。 請參閱`org.hibernate.context.CurrentSessionContext`接口的Javadoc,那里有關于它的契約的詳細討論。它定義了單一的方法,`currentSession()`,特定的實現用它來負責跟蹤當前的上下文session。Hibernate內置了此接口的三種實現。 * `org.hibernate.context.JTASessionContext` - 當前session根據`JTA`來跟蹤和界定。這和以前的僅支持JTA的方法是完全一樣的。詳情請參閱Javadoc。 * `org.hibernate.context.ThreadLocalSessionContext` - 當前session通過當前執行的線程來跟蹤和界定。詳情也請參閱Javadoc。 * `org.hibernate.context.ManagedSessionContext` - 當前session通過當前執行的線程來跟蹤和界定。但是,你需要負責使用這個類的靜態方法將`Session`實例綁定、或者取消綁定,它并不會打開(open)、flush或者關閉(close)任何`Session`。 前兩種實現都提供了“每數據庫事務對應一個session”的編程模型,也稱作_每次請求一個session_。Hibernate session的起始和終結由數據庫事務的生存來控制。假若你在純粹的 Java SE之上采用自行編寫代碼來管理事務,而不使用JTA,建議你使用Hibernate `Transaction` API來把底層事務實現從你的代碼中隱藏掉。如果你使用JTA,請使用JTA借口來管理Transaction。如果你在支持CMT的EJB容器中執行代碼,事務邊界是聲明式定義的,你不需要在代碼中進行任何事務或session管理操作。請參閱[第 11 章 _事務和并發_](../Text/pr01_split_000.html "第 11 章 事務和并發")一節來閱讀更多的內容和示例代碼。 `hibernate.current_session_context_class`配置參數定義了應該采用哪個`org.hibernate.context.CurrentSessionContext`實現。注意,為了向下兼容,如果未配置此參數,但是存在`org.hibernate.transaction.TransactionManagerLookup`的配置,Hibernate會采用`org.hibernate.context.JTASessionContext`。一般而言,此參數的值指明了要使用的實現類的全名,但那三種內置的實現可以使用簡寫,即"jta"、"thread"和"managed"。
                  <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>

                              哎呀哎呀视频在线观看