随笔 - 6  文章 - 129  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 821656
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

  一对一关系在实际生活中是比较常见的,如果学生与身份证的关系,学生与档案的关系等等。
  一对一关系在Hibernate中的实现有两种方式,分别是主键关联外键关联

以主键关联

  主键关系的重点是:关联的两个实体共享一个主键值。
Student.hbm.xml
...
<hibernate-mapping>
 <class name="model.Student" table="student" lazy="true"><!--把类和表关联起来-->
  <id name="id" unsaved-value="null"><!--id的产生方式是uuid.hex-->
   <generator class="uuid.hex"/>
  </id>
  <property name="name" type="sring"/>
  <one-to-one name="cer"
    class="model.Certificate"
    fetch="join"
    cascade="all"
  /><!--映射对应的身份证对象-->
 </class>
</hibernate-mapping>

Certificate.hbm.xml
...
<hibernate-mapping>
 <class name="model.Certificate" table="certificate" lazy="true">
  <id name="id">
  <!--外键生成机制,引用stu对象的主键作为certificate数据表的主键和外键-->
   <generator class="foreign">
    <param name="property">stu</param>
   </generator>

  </id>
  <one-to-one name="stu"
    class="model.Student"
    constrained="true" <!--表示Certificate引用了stu的主键作为外键-->
  />
 </class>
</hibernate-mapping>

上述的两个配置文件在<one-to-one>标签中都没有设置column属性
(实际上<one-to-one>标签本身就没有column属性)。


以外键关联

  以外键关联的重点是:两个实体各自有不同的主键,但其中一个实体有一个外键引用
了另一个表的主键。

Student.hbm.xml
...
<hibernate-mapping>
 <class name="model.Student" table="student" lazy="true">
  <id name="id" nusaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <property name="name" type="sring"/>
  <one-to-one name="cer"
    class="model.Certificate"
    fetch="join"
    cascade="all"
  /><!--映射对应的身份证对象-->
 </class>
</hibernate-mapping>
可以看到Student.hbm.xml和以主键关联时的代码是一样的,并没有改变。

Certificate.hbm.xml
...
<hibernate-mapping>
 <class name="model.Certificate" table="certificate" lazy="true">
  <id name="id">
   <generator class="uuid.hex"/> <!--不再是foreign了-->
  </id>
  <many-to-one name="stu"
    class="model.Student"
    unique="true" <!--唯一的多对一,其实也就变成了一对一关系-->
    column="stu_id" 
  />

 </class>
</hibernate-mapping>
以外键关联的一对一,其实本质上变成了一对多的双向关联了,编写时直接
按照一对多和多对一的要求编写,最后在many-to-one这一边上加上一个
unique="true"即可。



posted on 2007-12-29 14:00 Ke 阅读(1760) 评论(0)  编辑  收藏 所属分类: hibernate

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


网站导航: