Hibernate映射文件——.hbm.xml

映射文件的命名規則——類名.hbm.xml

映射文件告訴 Hibernate 它應該訪問數據庫(database)裏面的哪個表(table)及應該使用表裏面的哪些字段(column)。

一個映射文件的基本結構:

  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="org.hibernate.tutorial.domain">
  6.     <class name="Event" table="EVENTS">

  7.     </class>
  8. </hibernate-mapping

         注意:可以在文本編輯器裏打開 DTD — 這是最簡單的方式來概覽所有的元素和 attribute,並查看它們的缺省值以及註釋。

                     Hibernate 不會從 web 加載 DTD 文件,但它會首先在應用程序的 classpath 中查找。DTD 文件已包括在hibernate3.jar

hibernate-mapping 標籤(tag)之間, 含有一個 class 元素。所有的持久化實體類都需要一個這樣的映射,來把類對象映射到 SQL 數據庫裏的表。

每個實例對應着數據庫表中的一行

唯一標識符屬性到數據庫表的映射,由於我們不關心怎樣處理這個標識符,我們就配置由 Hibernate 的標識符生成策略來產生代理主鍵字段

該屬性也是在hibernate-mapping 標籤(tag)之間,代碼如下

  1. <hibernate-mapping package="org.hibernate.tutorial.domain">
  2.     <class name="Event" table="EVENTS">
  3.         <id name="id" column="EVENT_ID">
  4.             <generator class="native"/>
  5.         </id>
  6.     </class>
  7. </hibernate-mapping>

           註釋:id元素是對 identity 屬性的聲明。 name="id" 映射屬性聲明瞭 JavaBean 屬性的名稱並告訴 Hibernate 使用 getId() 和 setId()方法來訪問這個屬性。column 屬性告訴 Hibernate events表中的哪個字段持有主鍵值。

        generator 元素指定標識符的生成策略(也就是標識符值是怎麼產生的)。在這個例子裏,我們選擇native,它提供了取決於數據庫方言的可移植性。Hibernate 數據庫生成的、全局性唯一的以及應用程序分配的標識符。標識符值的生成也是 Hibernate 的擴展功能之一,你可以插入自己的策略。

 

最後我們在映射文件裏面包含需要持久化屬性的聲明。默認情況下,類裏面的屬性都被視爲非持久化的:

     事例代碼如下:

  1. <hibernate-mapping package="org.hibernate.tutorial.domain">
  2.     <class name="Event" table="EVENTS">
  3.         <id name="id" column="EVENT_ID">
  4.             <generator class="native"/>
  5.         </id>
  6.         <property name="date" type="timestamp" column="EVENT_DATE"/>
  7.         <property name="title"/>
  8.     </class>
  9. </hibernate-mapping>

            註釋:和 id 元素一樣,property元素的name屬性告訴 Hibernate 使用哪個 getter 和 setter方法。

           注意:爲什麼 date 屬性的映射含有 column attribute,而 title 卻沒有?當沒有設定 column attribute的時候,Hibernate 缺省地使用 JavaBean 的屬性名作爲字段名。對於title,這樣工作得很好。然而,date 在多數的數據庫裏,是一個保留關鍵字,所以我們最好把它映射成一個不同的名字。

       如果在映射文件中沒有設置 type 屬性的話,Hibernate 會自己試着去確定正確的轉換類型和它的映射類型。在某些情況下這個自動檢測機制(在 Java 類上使用反射機制)不會產生你所期待或需要的缺省值。date 屬性就是個很好的例子,Hibernate 無法知道這個屬性(java.util.Date 類型的)應該被映射成:SQLdate,或timestamp,還是time 字段。在此例中,把這個屬性映射成timestamp 轉換器,這樣我們預留了日期和時間的全部信息。

把新的映射加入到Hibernate的配置中:
格式<mapping resource="org/hibernate/tutorial/domain/Event.hbm.xml"/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章