文 / 喝口水就走
什么时候需要映射组成关系?
如: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">
</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的核心接口
插入表情