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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 10.10\. Session刷出(flush) 每間隔一段時間,`Session`會執行一些必需的SQL語句來把內存中的對象的狀態同步到JDBC連接中。這個過程被稱為_刷出(flush)_,默認會在下面的時間點執行: * 在某些查詢執行之前 * 在調用`org.hibernate.Transaction.commit()`的時候 * 在調用`Session.flush()`的時候 涉及的SQL語句會按照下面的順序發出執行: 1. 所有對實體進行插入的語句,其順序按照對象執行`Session.save()`的時間順序 2. 所有對實體進行更新的語句 3. 所有進行集合刪除的語句 4. 所有對集合元素進行刪除,更新或者插入的語句 5. 所有進行集合插入的語句 6. 所有對實體進行刪除的語句,其順序按照對象執行`Session.delete()`的時間順序 (有一個例外是,如果對象使用`native`方式來生成ID(持久化標識)的話,它們一執行save就會被插入。) 除非你明確地發出了`flush()`指令,關于Session_何時_會執行這些JDBC調用是完全無法保證的,只能保證它們執行的前后順序。 當然,Hibernate保證,`Query.list(..)`絕對不會返回已經失效的數據,也不會返回錯誤數據。 也可以改變默認的設置,來讓刷出(flush)操作發生的不那么頻繁。 `FlushMode`類定義了三種不同的方式。 僅在提交時刷出(僅當Hibernate的`Transaction` API被使用時有效), 按照剛才說的方式刷出, 以及除非明確使用`flush()`否則從不刷出。 最后一種模式對于那些需要長時間保持`Session`為打開或者斷線狀態的長時間運行的工作單元很有用。 (參見 [第 11.3.2 節 “擴展周期的session和自動版本化”](../Text/pr01_split_000.html#transactions-optimistic-longsession "11.3.2\. 擴展周期的session和自動版本化")). ``` sess = sf.openSession(); Transaction tx = sess.beginTransaction(); sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state Cat izi = (Cat) sess.load(Cat.class, id); izi.setName(iznizi); // might return stale data sess.find("from Cat as cat left outer join cat.kittens kitten"); // change to izi is not flushed! ... tx.commit(); // flush occurs sess.close(); ``` 刷出(flush)期間,可能會拋出異常。(例如一個DML操作違反了約束) 異常處理涉及到對Hibernate事務性行為的理解,因此我們將在[第 11 章 _事務和并發_](../Text/pr01_split_000.html "第 11 章 事務和并發")中討論。
                  <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>

                              哎呀哎呀视频在线观看