随笔 - 6  文章 - 129  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 814922
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

  一对多和多对一关系在实际生活中是非常常见的。在编写程序时,有两种实现的形式
分别是单向关联和双向关联。

单向关联

双向关联

  本节中使用到两个类,分别是班级(Team)和学生(Student),学生和班级之间是多对一
关系。
具体的关联实现源代码如下:
Student.hbm.xml
...
<hibernate-mapping>
 <class name="model.Student" table="student">
  <id name="id" unsaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <property name="name" type="string'/>
  <many-to-one name="team"
    class="model.Team"
    column="team_id" <!--和team发生关联的列名-->
    cascade="none"
    fetch="join"
  />

 </class>
</hibernate-mapping>

<many-to-one>标签具有column属性,column属性总是和关联类(对于Student来说,关联类
是Team)的主键id 相对应,因此Hibernate会根据student表中的team_id,根据Team表中设置
的id列(一般情况列名也叫id),取出team.id=student.team_id的记录,构造成Team对象返
回给Student类。

Team.hbm.xml
...
<hibernate-mapping>
 <class name="model.Team" table="team" lazy="true">
  <id name="id" unsaved-value="null">
   <generator class="uuid.hex"/>
  </id>
  <property name="teamName" type="string"/>
  <set name="students" cascade="save-update" lazy="true" inverse="true">
   <key column="team_id"/>
   <one-to-many class="model.Student"/>
  </set>

 </class>
</hibernate-mapping>

Team对Student是一对多关系,一对多具有<key column=""/>属性,key标签总是和本身类的主键
相对应。在取得Team对象时,通过Team的主键id与Student表中的team_id进行匹配,如果
team.id=student.team_id,则认为此学生是本班级的,于是加载学生,把学生对象加入Team
对象的学生集合。

设置inverse标签
  由于在Team.hbm.xml中设置了inverse="true",Team和Student之间的关系转由Student来维护
因此,当Team掌握维护权时(inverse="false"或者默认状态),它负责将自己的id告诉Student
,然后Hibernate发送update语句去更新记录。但现在设置了inverse="true"之后,维护权在
Student手中,于是Hibernate不再发送update语句,而由Student自动去取得team_id,而这个
动作其实就是完成一个“学生添加班级”动作,也就是语句newStu.setTeam(team)。



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

FeedBack:
# re: 一对多、多对一关联关系的使用[未登录] 2008-02-16 09:46 javaboy
顶 ! 写的太经典了 !   回复  更多评论
  
# re: 一对多、多对一关联关系的使用 2008-09-23 09:40 fyx
写的挺好的   回复  更多评论
  
# re: 一对多、多对一关联关系的使用 2008-09-24 15:21 ww13515517287@126.com
不错啊
通俗易懂
谢了  回复  更多评论
  

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


网站导航: