一对多和多对一关系在实际生活中是非常常见的。在编写程序时,有两种实现的形式
分别是单向关联和双向关联。
单向关联
双向关联
本节中使用到两个类,分别是班级(Team)和学生(Student),学生和班级之间是多对一
关系。
具体的关联实现源代码如下:
Student.hbm.xml
...
class="model.Team"
column="team_id"
cascade="none"
fetch="join"
/>
标签具有column属性,column属性总是和关联类(对于Student来说,关联类
是Team)的主键id 相对应,因此Hibernate会根据student表中的team_id,根据Team表中设置
的id列(一般情况列名也叫id),取出team.id=student.team_id的记录,构造成Team对象返
回给Student类。
Team.hbm.xml
...
Team对Student是一对多关系,一对多具有属性,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 阅读(2271) 评论(3) 编辑 收藏 所属分类: hibernate