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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 1.2.2\. 映射文件 Hibernate需要知道怎樣去加載(load)和存儲(store)持久化類的對象。這正是Hibernate映射文件發揮作用的地方。映射文件告訴Hibernate它,應該訪問數據庫(database)里面的哪個表(table)及應該使用表里面的哪些字段(column)。 一個映射文件的基本結構看起來像這樣: ``` <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> [...] </hibernate-mapping> ``` 注意Hibernate的DTD是非常復雜的。你的編輯器或者IDE里使用它來自動完成那些用來映射的XML元素(element)和屬性(attribute)。你也可以在文本編輯器里打開DTD-這是最簡單的方式來概覽所有的元素和attribute,并查看它們的缺省值以及注釋。注意Hibernate不會從web加載DTD文件,但它會首先在應用程序的classpath中查找。DTD文件已包括在`hibernate3.jar`里,同時也在Hibernate發布包的`src/`目錄下。 為縮短代碼長度,在以后的例子里我們會省略DTD的聲明。當然,在實際的應用程序中,DTD聲明是必須的。 在`hibernate-mapping`標簽(tag)之間, 含有一個`class`元素。所有的持久化實體類(再次聲明,或許接下來會有依賴類,就是那些次要的實體)都需要一個這樣的映射,來把類對象映射到SQL數據庫里的表。 ``` <hibernate-mapping> <class name="events.Event" table="EVENTS"> </class> </hibernate-mapping> ``` 到目前為止,我們告訴了Hibernate怎樣把`Events`類的對象持久化到數據庫的`EVENTS`表里,以及怎樣從`EVENTS`表加載到`Events`類的對象。每個實例對應著數據庫表中的一行。現在我們將繼續討論有關唯一標識符屬性到數據庫表的映射。另外,由于我們不關心怎樣處理這個標識符,我們就配置由Hibernate的標識符生成策略來產生代理主鍵字段。 ``` <hibernate-mapping> <class name="events.Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="native"/> </id> </class> </hibernate-mapping> ``` `id`元素是標識符屬性的聲明,`name="id"` 聲明了Java屬性的名字 - Hibernate會使用`getId()`和`setId()`來訪問它。 `column`屬性則告訴Hibernate, 我們使用`EVENTS`表的哪個字段作為主鍵。嵌套的`generator`元素指定了標識符生成策略,在這里我們指定`native`,它根據已配置的數據庫(方言)自動選擇最佳的標識符生成策略。Hibernate支持由數據庫生成,全局唯一性(globally unique)和應用程序指定(或者你自己為任何已有策略所寫的擴展)這些策略來生成標識符。 最后我們在映射文件里面包含需要持久化屬性的聲明。默認情況下,類里面的屬性都被視為非持久化的: ``` <hibernate-mapping> <class name="events.Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="native"/> </id> <property name="date" type="timestamp" column="EVENT_DATE"/> <property name="title"/> </class> </hibernate-mapping> ``` 和`id`元素一樣,`property`元素的`name`屬性告訴Hibernate使用哪個getter和setter方法。在此例中,Hibernate會尋找`getDate()/setDate()`, 以及`getTitle()/setTitle()`。 為什么`date`屬性的映射含有`column` attribute,而`title`卻沒有?當沒有設定`column` attribute 的時候,Hibernate缺省地使用JavaBean的屬性名作為字段名。對于`title`,這樣工作得很好。然而,`date`在多數的數據庫里,是一個保留關鍵字,所以我們最好把它映射成一個不同的名字。 另一有趣的事情是`title`屬性缺少一個`type` attribute。我們在映射文件里聲明并使用的類型,卻不是我們期望的那樣,是Java數據類型,同時也不是SQL數據庫的數據類型。這些類型就是所謂的Hibernate 映射類型_(mapping types)_,它們能把Java數據類型轉換到SQL數據類型,反之亦然。再次重申,如果在映射文件中沒有設置`type`屬性的話,Hibernate會自己試著去確定正確的轉換類型和它的映射類型。在某些情況下這個自動檢測機制(在Java 類上使用反射機制)不會產生你所期待或需要的缺省值。`date`屬性就是個很好的例子,Hibernate無法知道這個屬性(`java.util.Date`類型的)應該被映射成:SQL `date`,或`timestamp`,還是`time` 字段。在此例中,把這個屬性映射成`timestamp` 轉換器,這樣我們預留了日期和時間的全部信息。 應該把這個映射文件保存為`Event.hbm.xml`,且就在`Event`Java類的源文件目錄下。映射文件可隨意地命名,但`hbm.xml`的后綴已成為Hibernate開發者社區的約定。現在目錄結構看起來應該像這樣: ``` . +lib <Hibernate and third-party libraries> +src +events Event.java Event.hbm.xml ``` 我們繼續進行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>

                              哎呀哎呀视频在线观看