Hibernate之component映射

来源:互联网 发布:mysql总是弹出taskeng 编辑:程序博客网 时间:2024/05/17 23:33

    我们学习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映射,我们可以在不增加表的复杂度


的情况下,简化程序的设计。

0 0
原创粉丝点击