<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之旅 廣告
                # Hibernate 4 中的實體繼承模型 > 原文: [https://javabeginnerstutorial.com/hibernate/entity-inheritance-models-in-hibernate-4/](https://javabeginnerstutorial.com/hibernate/entity-inheritance-models-in-hibernate-4/) 上一次我們研究了將實體關系映射到數據庫。 現在該關注主要的對象關系:繼承。 如您所知,對象可以彼此繼承,以將通用函數移到超類中,并且子代中只有不同部分。 使用 Hibernate 也可以實現相同的目的:您可以將通用函數分組到父類中,并且僅將差異添加到子類中,還可以將此關系映射到數據庫。 ## 這個示例 我將在書本中繼續使用該示例-但這意味著該示例現在很難理解,但我嘗試使其對您來說更舒適。 ## 人,作者和出版者 首先,我考慮了書本繼承法,但最后得出了一個簡單的人繼承模型,該模型既可以是作者又可以是出版者。 每個人都有一個名字(這是主要標識符)和一個電子郵件地址。 作者維護一份書面書籍清單以及其出版者的參考文獻(每個作者只能有一個出版者)。 出版商具有稅號和其作者列表。 ## 單表繼承 第一個繼承模型是**單個表**。 它將每個子類(顧名思義)存儲在單個數據庫表中。 這意味著您不能在子類的必需列上應用數據庫級別的約束,因為其他子類沒有此字段,這將引發完整性違例異常。 要告訴實體結構使用單表繼承,請在基本實體的定義上添加以下代碼: ```java @Inheritance(strategy = InheritanceType.SINGLE_TABLE) ``` 為了區分存儲在單個表中的實體類型,Hibernate(通常是 JPA)使用**區分符列**。 如果未提供區分符列的定義,則 Hibernate 將使用名為`DTYPE`的字符串列,其長度為 **31** 個字符。 鑒別符列的默認值是實體的名稱,因此在此示例中有兩個鑒別符:`author`和`Publisher`。 通過使用`@DiscriminatorColumn`和`@DiscriminatorValue`,您可以覆蓋這些默認值以適合您的架構和要求。 ## 連接繼承 第二種類型是**連接**繼承。 在這種情況下,子類以 *ID* 作為公共標識符存儲在單獨的數據庫表中,在這里,Hibernate 可以將請求的子代與基類一起連接。 要創建聯接繼承,只需將以下內容添加到父類定義中: ```java @Inheritance(strategy = InheritanceType.JOINED) ``` ## 每個類的表繼承 第三種類型是每個類模型的**表**,其中每個實例都有自己的表,表中包含所有信息。 這意味著很大的冗余,并且違反了數據庫規范化規則,因為每個實例的父類的所有信息都存儲在單個表中。 示例作者存儲`name`,`emailAdress`和`PublisherId`,而發布者存儲`name`,`emailAdress`和`taxId`。 并且沒有為抽象類創建用于存儲人員的表,因為 Hibernate 知道`AbstractPerson`*實體是*抽象*,因此它不需要任何表來存儲信息。 每個類的表繼承可以與超類的以下注解一起使用: ```java @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) ``` ## 使用哪一個? 這取決于您的應用。 但是,我從未見過任何應用在應用中使用按類分配表的策略,只有連接表或單個表。 有時大的繼承樹會導致由 Hibernate 創建的大聯接查詢,有時比單表解決方案要慢。 但是,有時更好的方法是跳過 Hibernate 并手動創建查詢,以加快結果收集的速度,并避免 Hibernate 對數據結構及其如何收集信息的假設。 ## 總結 繼承策略對于通過維護的面向對象設計將實體建模到數據庫是很好的。 但這會導致來自 Hibernate 的查詢很大且很慢,但這并不意味著您應該避免使用它們。 在下一篇文章中,我將向您展示如何使用 HQL 和 JPQL 編寫自己的 Hibernate 查詢,因??為`main`方法中的當前查詢不是最好的。 #### 代碼下載 您可以從 Github [此處](https://github.com/JBTAdmin/Hibernate)下載特定章節的代碼。
                  <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>

                              哎呀哎呀视频在线观看