在http://blog.csdn.net/qq_21231581/article/details/51814374中我们对Hibernate中的配置文件,常用API做了初步的了解与探讨,接下来我们将了解一下Hibernate中的关联映射
1.映射关联概述
在数据库中一般有一对多,一对一以及多对多的数据关系例如:个人和ID(一对一),班级和学生(一对多)或是广播消息与接受者(多对多),而在持久层也相对应的存在该关系,Hibernate帮助我们能通过pojo对象的getter/setter方法就能查询设置关联的另一方对象
2.多对一基本应用
1.创建pojo对象类,形如(当然也要对应地创建一个“一方对象”):
public class Student implements Serializable {
......
private Grade grade;
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
......
}</span>
2.自动生成hbm.xml映射文件,形如:
<hibernate-mapping>
<class name="hibernate.Student" table="STUDENT">
......
<!--name:对应的成员名
class:成员的类名
-->
<many-to-one name="grade" class="hibernate.Grade" fetch="join">
<!-- name:外键在数据库中的列名 -->
<column name="GID" />
</many-to-one>
</class>
</hibernate-mapping>
3.在Java代码中运用
//从数据库取出grade
Grade grade = (Grade)session.get(Student.class, 1);
//创建student对象
Student student = new Student();
student.setAge(11);
student.setSid(99);
student.setDate(new Date());
student.setEmail("sdfdsadf");
student.setName("Pharaoh");
student.setGrade(grade);
//保存student到数据库
session.save(student);
4.完成了student的对象存储,并且数据中student关联了Grade的外键
3.一对多基本应用
1.步骤一同上,Bean代码形如:
public class Grade implements Serializable {
private Set<Student> students = new HashSet<>();
......
public Set<Student> getStudents() {return students;}
public void setStudents(Set<Student> students) {
this.students = students;
}
......
}
2.生成hbm.xml映射文件,形如:
<hibernate-mapping>
......
<!-- inverse:双向关联的控制方
lazy:懒加载
cascade:级联方式
-->
<set name="students" table="STUDENT" inverse="true" lazy="true" cascade="all">
<key>
<column name="GID" />
</key>
<one-to-many class="hibernate.Student" />
</set>
</class>
</hibernate-mapping>
3.Java代码也很简单,大家可以尝试,我就不贴代码了
注:经过如上步骤,Student和Grade形成双向关联,只要用session.save()保存一方即可,但是“多方”的Bean(student)需要事先用setter方法设置“一方”(Grade)的对象,否则数据库中的外键会变为null值
一对多,多对一是我们项目开发中最常见的数据结构,后期有时间我也会继续更新一对一,多对多的的关联映射的基本知识的学习