<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.11\. 傳播性持久化(transitive persistence) 對每一個對象都要執行保存,刪除或重關聯操作讓人感覺有點麻煩,尤其是在處理許多彼此關聯的對象的時候。 一個常見的例子是父子關系。考慮下面的例子: 如果一個父子關系中的子對象是值類型(value typed)(例如,地址或字符串的集合)的,他們的生命周期會依賴于父對象,可以享受方便的級聯操作(Cascading),不需要額外的動作。 父對象被保存時,這些值類型(value typed)子對象也將被保存;父對象被刪除時,子對象也將被刪除。 這對將一個子對象從集合中移除是同樣有效:Hibernate會檢測到,并且因為值類型(value typed)的對象不可能被其他對象引用,所以Hibernate會在數據庫中刪除這個子對象。 現在考慮同樣的場景,不過父子對象都是實體(entities)類型,而非值類型(value typed)(例如,類別與個體,或母貓和小貓)。 實體有自己的生命期,允許共享對其的引用(因此從集合中移除一個實體,不意味著它可以被刪除), 并且實體到其他關聯實體之間默認沒有級聯操作的設置。 Hibernate默認不實現所謂的_可到達即持久化(persistence by reachability)_的策略。 每個Hibernate session的基本操作 - 包括 `persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()` - 都有對應的級聯風格(cascade style)。 這些級聯風格(cascade style)風格分別命名為 `create, merge, save-update, delete, lock, refresh, evict, replicate`。 如果你希望一個操作被順著關聯關系級聯傳播,你必須在映射文件中指出這一點。例如: ``` <one-to-one name="person" cascade="persist"/> ``` 級聯風格(cascade style)是可組合的: ``` <one-to-one name="person" cascade="persist,delete,lock"/> ``` 你可以使用`cascade="all"`來指定_全部_操作都順著關聯關系級聯(cascaded)。 默認值是`cascade="none"`,即任何操作都不會被級聯(cascaded)。 注意有一個特殊的級聯風格(cascade style) `delete-orphan`,只應用于one-to-many關聯,表明`delete()`操作 應該被應用于所有從關聯中刪除的對象。 建議: * 通常在`&lt;many-to-one&gt;`或`&lt;many-to-many&gt;`關系中應用級聯(cascade)沒什么意義。 級聯(cascade)通常在 `&lt;one-to-one&gt;`和`&lt;one-to-many&gt;`關系中比較有用。 * 如果子對象的壽命限定在父親對象的壽命之內,可通過指定`cascade="all,delete-orphan"`將其變為_自動生命周期管理的對象(lifecycle object)_。 * 其他情況,你可根本不需要級聯(cascade)。但是如果你認為你會經常在某個事務中同時用到父對象與子對象,并且你希望少打點兒字,可以考慮使用`cascade="persist,merge,save-update"`。 可以使用`cascade="all"`將一個關聯關系(無論是對值對象的關聯,或者對一個集合的關聯)標記為_父/子_關系的關聯。 這樣對父對象進行save/update/delete操作就會導致子對象也進行save/update/delete操作。 此外,一個持久的父對象對子對象的淺引用(mere reference)會導致子對象被同步save/update。 不過,這個隱喻(metaphor)的說法并不完整。除非關聯是`&lt;one-to-many&gt;`關聯并且被標記為`cascade="delete-orphan"`, 否則父對象失去對某個子對象的引用_不會_導致該子對象被自動刪除。 父子關系的級聯(cascading)操作準確語義如下: * 如果父對象被`persist()`,那么所有子對象也會被`persist()` * 如果父對象被`merge()`,那么所有子對象也會被`merge()` * 如果父對象被`save()`,`update()`或 `saveOrUpdate()`,那么所有子對象則會被`saveOrUpdate()` * 如果某個持久的父對象引用了瞬時(transient)或者脫管(detached)的子對象,那么子對象將會被`saveOrUpdate()` * 如果父對象被刪除,那么所有子對象也會被`delete()` * 除非被標記為`cascade="delete-orphan"`(刪除“孤兒”模式,此時不被任何一個父對象引用的子對象會被刪除), 否則子對象失掉父對象對其的引用時,_什么事也不會發生_。 如果有特殊需要,應用程序可通過顯式調用delete()刪除子對象。 最后,注意操作的級聯可能是在_調用期(call time)_或者_寫入期(flush time)_作用到對象圖上的。所有的操作,如果允許,都在操作被執行的時候級聯到可觸及的關聯實體上。然而,`save-upate`和`delete-orphan`是在`Session` flush的時候才作用到所有可觸及的被關聯對象上的。
                  <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>

                              哎呀哎呀视频在线观看