字体大小: 正文
Hibernate笔记=>组成关系的映射(2006-08-18 07:38:44)

    举个例子说明什么是组成关系,Person类和Hand类。当Person消失后,Hand自然就没有意义了,也应该随之消失。换句话说,组成关系就是[部分类]对象生命周期依赖于[整体类]对象的生命周期,当[整体类]消失时,[部分类]也随即消失。这种关系也叫聚集关系。
 
什么时候需要映射组成关系?
如:Customer类和Address类。
Customer类有属性:id,name,homeAddress,compAddress.
Address类有属性:province,city,street,customer
在DB中,为了尽量减少表的数量,没有必要创建一个ADDRESSES表的时候,使用组成关系映射最为合适了。此时,需要在CUSTOMERS表中,设置如下字段:
ID,NAME,HOME_PROVINCE,HOME_CITY,HOME_STREET,COMP_PROVINCE,COMP_CITY,COMP_STREET.
当然在决定DB结构的时候,我们是必须在空间和时间做一个折中考虑的。以上这种设计就是出于效率考虑的,如果是出于结构考虑的话,还是应该有一个ADDRESSES表存在为好。
 
如何配置MappingXML?
对于Customer类的name属性,仍用<property>,但是对于homeAddress和compAddress属性则需要使用<component>元素了。如下:
<hibernate-mapping package="com.wjb.mypack">
    <class name="Customer" table="CUSTOMERS">
        <id name="id" type="long" column="ID">
            <generator class="native">
        </id>
        <property name="name" type="string"/>
        <component name="homeAddress" class="Address">
            <parent name="customer"/>
            <property name="province" column="HOME_PROVINCE">
            <property name="city" column="HOME_CITY">
            <property name="street" column="HOME_STREET"> 
        </component>
        <component name="compAddress" class="Address">
            <parent name="customer"/>
            <property name="province" column="COMP_PROVINCE">
            <property name="city" column="COMP_CITY">
            <property name="street" column="COMP_STREET"> 
        </component>
    </class>
</hibernate>
以上类中的<component>中有<parent>和<property>,其中<parent>用来配置组件类所属的整体类。Hibernate将根据这个属性来决定组件类的生命周期。
 
复合组成关系的映射
Hibernate支持复合组成关系的映射,所谓复合就是<component>元素的嵌套使用。
<component name="homeAddress" class="Address">
    <parent name="customer"/>
    <property name="province" column="HOME_PROVINCE">
    <property name="city" column="HOME_CITY">
    <property name="street" column="HOME_STREET"> 
    <component name="communication" class="Communication">
        <parent name="address"/>
        <property name="zoneNumber" column="HOME_ZONE_PHONENO">
        <property name="detailNumber" column="HOME_DETAIL_PHONENO">
    </component>
</component>
这种嵌套根据实际需要使用,但是还是越少越好。
 



其他相关文章

Hibernate组成关系的映射
Hibernate批量更新和删除问题
Hibernate缓存技术
Hibernate Java/.net对象的状态
Hibernate Session缓存
Hibernate 检索策略
Hibernate 检索相关细节问题
Hibernate 继承关系的映射
Hibernate 一对多关系的映射
Hibernate 对象与关系的映射基础
Hibernate跑起来
Hibernate的核心接口

加载中,请稍候...
  • 评论加载中,请稍候...

验证码:请点击后输入验证码  收听验证码

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

相关博文
读取中...
推荐博文
读取中...