配置对象关联关系
- 单向一对多关系
- 例如:班级与学生
Grade类中
public class Grade{private int gid;private String gname;private String gdesc;private Set student = new HashSet();//set实现班级与学生的一对多关系
}
Grade.hbm.xml中
<hibernate-mapping><class name="com.pb.hibernate.po.Grade" table="GRADE"><set name="students" inverse="true"><!-- inverse为true,则表示本端不能维护关系,会交给另一端维护关系,本端失效。此处我们让多的一端维护关系,一的一端失效。所以,此处设置为true --><!--学生表中的外键--><key column="GID"/><one-to-many class="com.pb.hibernate.po.Student"/></set></class>
</hibernate-mapping>
上面我们配置了从班级到学生的关联映射,下面我们配置从学生到班级的多对一映射关系,这样就构成双向关联映射。双向关联映射与单向关联映射的区别是:http://blog.csdn.net/yanmei_yao/article/details/7596163
总结:通过一对多双向关联映射,我们将关系交给多的一端维护,而且从一的一端也能够看到多的一端。这样就很好的解决了一对多单向关联的缺陷,优化之后的它查询数据,不管是一的一端还是多的一端,只需要一个sql语句就搞定了。要知道他不是由于需求驱动而设计的。
学生类中:
public class Student{private int sid;private String sname;private String sex;private Grade grade;//多对一关系
}
映射中:
<hibernate-mapping><class name="com.pb.hibernate.po.Student" table="STUDENT">...<many-to-one name="Grade"><!--grade属性对应的数据库表中的字段--><column name="GID"/></many-to-one></class>
</hibernate-mapping>
一对一关联映射
比如:学生表与学生证表的关系
1 Student类中增加Paper属性
2 Paper类中Student属性
3 学生映射中:
<one-to-one name="paper" class="com....Paper" cascade="all" lazy="false" property-ref="student"/>
4 证件映射中:
<many-to-one name="student" class="com....Student" unique="true" lazy="false"><!--指明学生属性对应表的字段--><column name="sid"/>
</many-to-one>