paulwong

HIBERNATE中的对象设计

zRoom与User存在一对多的关系,如果要在取得Room的同时取得User,则在Room中加入Set,List或Map类型的集合成员,Set中的元素不可以重复,List中的元素可以重复,Map是鍵值对类型的集合。

在HIBERNATE的配置文件中象这样配置:


<set name="users" table="user" cascade="all"  inverse="true"  lazy="extra">
            
<key column="room_id"/>
            
<one-to-many class="paul.com.User"/>
</set>

  1. 指定users私有成员的类型为SET:set name="users"
  2. 指定集合中的对象类型为User:<one-to-many class="paul.com.User"/>
  3. 指定User对应的表:table="user"
  4. 指定外键:<key column="room_id"/>
  5. 指定如果同时新增、修改、删除关联的Room和User对象时,是否需要HIBERNATE执行两次操作:cascade="all"
  6. 指定 lazy="extra",则集合中的元素不会被一起取出,而且要读SIZE时,只会发送一条COUNT的SQL语句至后台
  7. 指定 inverse="true"时,当保存一的对象时,对应的多的对象不会同时被保存。

如果要在取得User对象的同时取得Room对象,则在User中加入私有成员Room,在HIBERNATE的配置文件中如下配置:


<many-to-one name="room" 
             column
="room_id"
             class
="paul.com.Room"
             cascade
="all"
             outer-join
="true"/> 

  1. 指定名称为room成员的类型:many-to-one name="room"
  2. 指定room对应的类名:class="paul.com.Room"
  3. 指定外键:column="room_id"
  4. 指定如果同时新增、修改、删除关联的Room和User对象时,是否需要HIBERNATE执行两次操作:cascade="all"
  5. 指定关联两个表时的查询是否使用left-outer关键字:outer-join="true"
User和Server是多对多的关系,如要在取得User对象的同时取得Server,可以User中加入Set私有成员,在HIBERNATE中如下配置:


<set name="servers" 
             table
="user_server" 
             cascade
="save-update"> 
 
            
<key column="user_id"/> 
            
<many-to-many class="paul.com.Server"
                          column
="server_id"/> 
</set>

  1. 指定名称为servers的私有成员的类型为SET:set name="servers"
  2. 指定中间表为:table="user_server"
  3. 指定User表与中间表关联的外键:key column="user_id"
  4. 指定集合中的对象类型为:many-to-many class="paul.com.Server"
  5. 指定中间表与Server关联的外键:column="server_id"
  6. 指定如果同时新增、修改、删除关联的Room和User对象时,是否需要HIBERNATE执行两次操作:cascade="save-update"

如此配置后,将大量减少SQL语句的撰写。

posted on 2009-05-01 11:57 paulwong 阅读(341) 评论(0)  编辑  收藏 所属分类: HIBERNATE


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


网站导航: