Hibernate之component映射

    我們學習component映射首先要了解它的一些特性。組件(component)屬性的意思是:持久化類的屬性並不是基本


數據類型,也不是字符串、日期等類型的變量,而是一個被包含的對象,在持久化的過程中,它僅僅被當做值類型,


而並非一個實體引用。在DDD中被稱爲值類,與實體類的區別就是沒有標識。


屬性介紹:


在hibernate中Component映射採用<component>標籤即可,主要屬性有:

 

      1name:用於指定該組件屬性的名稱。

      

   (2class:指定組件類的類名。如果不指定該屬性,Hibernate將通過反射來得到該組件的類型。

      

   (3insert:指定被映射的字段是否出現在SQLinsert語句中。

      

   (4update:指定被映射的字段是否出現在SQLupdate語句中。

      

   (5access:指定Hibernate訪問該組件屬性的訪問策略。

      

   (6lazy:設置該組件是否在持久化對象第一次被訪問時啓用延遲加載,該屬性默認是true

      

   (7optimistic-lock:設置更新該組件屬性是否需要獲取樂觀鎖,如果該屬性設置爲true,則當修改該組件屬性


        時,持久化對象的版本號會增加。


示例:


     對象模型:


 

關係模型:


 

映射文件:


Employee.hbm.xml


<span style="font-size:18px;"><hibernate-mapping>  
    <class name="com.wyj.hibernate.Employee" table="t_emplyee">  
        <id name="id">  
            <generator class="native"/>  
        </id>  
        <property name="name"/>  
        <component name="employeeContact">  
            <property name="email"/>  
            <property name="address"/>  
            <property name="zipCode"/>  
            <property name="contactTel"/>  
        </component>  
    </class>  
</hibernate-mapping>  </span>


User.hbm.xml


<span style="font-size:18px;"><hibernate-mapping>  
    <class name="com.wyj.hibernate.User" table="t_user">  
        <id name="id">  
            <generator class="native"/>  
        </id>  
        <property name="name"/>  
        <component name="userContact">  
            <property name="email"/>  
            <property name="address"/>  
            <property name="zipCode"/>  
            <property name="contactTel"/>  
        </component>  
    </class>  
</hibernate-mapping>  </span>


 

Component的優點:

 

         實現對象模型的細粒度劃分,複用率高,含義明確,層次分明對象模型與關係模型的設計恰恰相

 

反,對象模型一般是細粒度的,關係模型一般是粗粒度的


總結:

 

    我們可以發現components映射中,對象和數據表並不是一一對應的,對象的設計粒度要比數據表更細。通過輔助


對象,簡化程序中的操作,而表結構卻並沒有發生變化。也就是通過component映射,我們可以在不增加表的複雜度


的情況下,簡化程序的設計。

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