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

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 4.4\. 動態模型(Dynamic models) _注意,以下特性在當前處于試驗階段,將來可能會有變化。_ 運行期的持久化實體沒有必要一定表示為像POJO類或JavaBean對象那樣的形式。Hibernate也支持動態模型 (在運行期使用`Map`的`Map`)和象DOM4J的樹模型那 樣的實體表示。使用這種方法,你不用寫持久化類,只寫映射文件就行了。 Hibernate默認工作在普通POJO模式。你可以使用配置選項`default_entity_mode`, 對特定的`SessionFactory`,設置一個默認的實體表示模式。 (參見[表 3.3 “ Hibernate配置屬性 ”](../Text/pr01_split_000.html#configuration-optional-properties "表 3.3\. Hibernate配置屬性 ")。) 下面是用`Map`來表示的例子。首先,在映射文件中,要聲明 `entity-name`來代替一個類名(或作為一種附屬)。 ``` <hibernate-mapping> <class entity-name="Customer"> <id name="id" type="long" column="ID"> <generator class="sequence"/> </id> <property name="name" column="NAME" type="string"/> <property name="address" column="ADDRESS" type="string"/> <many-to-one name="organization" column="ORGANIZATION_ID" class="Organization"/> <bag name="orders" inverse="true" lazy="false" cascade="all"> <key column="CUSTOMER_ID"/> <one-to-many class="Order"/> </bag> </class> </hibernate-mapping> ``` 注意,雖然是用目標類名來聲明關聯的,但是關聯的目標類型除了是POJO之外,也可以 是一個動態的實體。 在使用`dynamic-map`為`SessionFactory` 設置了默認的實體模式之后,可以在運行期使用`Map`的 `Map`。 ``` Session s = openSession(); Transaction tx = s.beginTransaction(); Session s = openSession(); // Create a customer Map david = new HashMap(); david.put("name", "David"); // Create an organization Map foobar = new HashMap(); foobar.put("name", "Foobar Inc."); // Link both david.put("organization", foobar); // Save both s.save("Customer", david); s.save("Organization", foobar); tx.commit(); s.close(); ``` 動態映射的好處是,變化所需要的時間少了,因為原型不需要實現實體類。然而,你無法進行 編譯期的類型檢查,并可能由此會處理很多的運行期異常。幸虧有了Hibernate映射,它使得數 據庫的schema能容易的規格化和合理化,并允許稍后在此之上添加合適的領域模型實現。 實體表示模式也能在每個`Session`的基礎上設置: ``` Session dynamicSession = pojoSession.getSession(EntityMode.MAP); // Create a customer Map david = new HashMap(); david.put("name", "David"); dynamicSession.save("Customer", david); ... dynamicSession.flush(); dynamicSession.close() ... // Continue on pojoSession ``` 請注意,用`EntityMode`調用`getSession()`是在 `Session`的API中,而不是`SessionFactory`。 這樣,新的`Session`共享底層的JDBC連接,事務,和其他的上下文信 息。這意味著,你不需要在第二個`Session`中調用 `flush()`和`close()`,同樣的,把事務和連接的處理 交給原來的工作單元。 關于XML表示能力的更多信息可以在[第 18 章 _XML映射_](../Text/pr01_split_000.html "第 18 章 XML映射")中找到。
                  <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>

                              哎呀哎呀视频在线观看