论坛首页 Java企业应用论坛

Hibernate中的几种经典对象模型和关系模型的映射

浏览 3890 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-11-29   最后修改:2011-01-08
1.many to one 多对一映射
此种模型最经典的为user-->group,即站在user的角度上看,是由多个user对象属于一个group对象。反过来的话,则是一个group对应多个user,那是一对多关系。此种映射一旦建立,能在得到user对象的时候通过对象之间的关系得到group的属性。

类:
User:
private int id;
private String name;
private Group group;
Group:
private int id;
private String name;

主要映射文件:
<class name="com.vle.domain.User" table="t_user">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <many-to-one name="group" column="groupid"/>
</class>

得到属性值:
User u=(User) session.load(User.class, 1);
System.out.print(u.getName()+"-->"+u.getGroup().getName());

2.one2one 主键关联 单向映射
Person-->IdCard 一个人对应一个身份证,"人"引用了"身份证"的主键作为外键,同时也作为"人"这张表的主键。
Person:
private int id;
private String name;
private IdCard idCard;
IdCard:
private int id;
private String cardNo;

主要映射文件:
<class name="com.vle.domain.Person" table="t_person">
  <id name="id">
   <!-- 通过foreign得到id生成策略,foreign会得到关联对象的标示 -->
   <generator class="foreign">
    <!-- property指的是建立关系的关联对象,即Person中引用IdCard的idCard -->
    <param name="property">idCard</param>
   </generator>
  </id>
  <property name="name"/>
   <!-- 使用one-to-one标签进行描述,不会改变表结构,让hibernate加载关联对象,默认关联对象的主键作为此类的主键
    使用 constrained生成外键约束
    name:指加载对象时,通过Person指定的主键(也就是idCard)把IdCard的关联加上去
    -->
  <one-to-one name="idCard" constrained="true"/>
</class>

3.one2one 主键关联 双向映射
需要在IdCard对象中加入对Person的引用
IdCard:
private int id;
private String cardNo;
private Person person;

并且需要在IdCard.hbm.xml中加入对引用的描述:
<class name="com.vle.domain.IdCard" table="t_idcard">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="cardNo"/>
  <one-to-one name="person"/>
</class>

4 one2one 唯一外键关联 单向关联
在person中持有idcard的引用:
private IdCard idCard;
Person映射文件:
<class name="com.vle.domain.Person" table="t_person">
  <id name="id">
   <generator class="native"/>
    </id>
  <property name="name"/>
  <many-to-one name="idCard" unique="true"/>
</class>
一对一唯一外键关联可以看做多对一的一种特例,只需要在many to one标签中将unique的属性设置为true即可。

5 one2one 唯一外键关联 双向关联
需要在IdCard中持有对Person的引用
private Person person;
IdCard映射文件:
<one-to-one name="person" property-ref="idCard"/>
将person用一对一标签描述,并且引用了外键idCard。

   发表时间:2007-12-02  
这个和数据结构和算法没有关系吧
0 请登录后投票
   发表时间:2007-12-02  
呵呵
<joe@smith.com>


"Joe Smith" <joe@smith.com>

都是合法的邮件地址
0 请登录后投票
   发表时间:2007-12-03  
,你这是第几代计算机的数据结构啊?
0 请登录后投票
   发表时间:2007-12-04  
严格上说,正则表达式也是属于数据结构的吧

so,楼上,不是第几代
0 请登录后投票
   发表时间:2007-12-06  
什么数据结构呀,楼主是不是脑袋有问题,没系统学习过!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics