eric-1001c

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  3 随笔 :: 45 文章 :: 12 评论 :: 0 Trackbacks
    1. 建立域模型和关系数据模型有着不同的出发点:域模型是由程序代码组成的,通过细化持久化类的粒度来提高代码可重用性,简化编程;而关系数据模型是由关系数据组成的,在存在数据冗余的情况下,可以把粗粒度的表拆分成具有外键参照关系的几个细粒度表,此外在没有数据冗余的情况下应该尽可能减少表的数目,简化表之间的参照关系。
    域模型中的聚集aggregation对象关系在关系数据模型中可以通过映射为组成关系来提高代码和数据库访问质量。比如说一个customer具有homeAddress和comAddress属性,从域模型出发,应该把homeAddress和comAddress抽取出来成为一个过程对象。而在关系数据模型中可以通过hibernate提供的组成关系进行映射。映射文件如下:
1<component name="homeAddress" class="com.homeAddress">
2  <parent name="customer"/>
3  <property name="street" type="String" column="HOME_STREET"/>
4  <property name="city" type="String" column="HOME_CITY"/>
5   
6</component>
这样进行映射后,并不需要为homeAddress和comAddress单独设置数据库表,应该把homeAddress和comAddress的属性都和customer表放在一起
而有一点要格外注意的是,域模型的组成对象homeAddress和comAddress对象除了具有一般的属性成员变量外,需要为hibernate提供一个parent属性,如下所示
 1packge com;
 2
 3import java.io.Serializabel;
 4
 5public class HomeAddress implements Serializable{
 6   private String street;
 7   private String city;
 8   
 9   private com.Customer customer;
10   
11   public void setCustomer(Customer customer){}
12      public Customer getCustomer(){}

hibernate提供的这种组成关系映射允许嵌套使用
1<component>
2  <compoent>
3   
4  </componet>
5   
6</component>

    2. 区分值value类型和实体Entity类型
        Hibernate把持久化类的属性分为value和Entity类型。前者没有OID,不能被单独持久化,不能单独通过session加载,它的生命周期依赖于所属的持久化类的对象生命周期,组件类型就是一种类型;而后者有OID,可以被单独持久化。在通过Configuration类的addClass()方法加载映射文件时,只需要加载与value类型对应的实体类型,而不需要单独加载组件类。当通过hibernate进行数据库操作的时候,hibernate会自动把组件类的属性转换为实体类的属性,从而和table的列对应起来
posted on 2008-01-23 20:47 Eric-1001c 阅读(213) 评论(0)  编辑  收藏 所属分类: Hibernate

只有注册用户登录后才能发表评论。


网站导航: