Hibernate中配置映射关系
准备工作
- 进行Hibernate的基本配置
- 创建HibernateUtil工具类
- 进行数据表的建立
- 创建持久化类和映射关系文件
配置单向一对多关系
使用标签在一方的hbm.xml文件中,配置单向的一对多映射,如:
<!-- 配置单向的一对多映射 设置inverse属性为true 由多方维护关联关系 ,
设置cascade="save-update",当进行保存和更新时级联操作所关联的对象-->
<set name="students" table="student" inverse="false" lazy="true" cascade="save-update">
<!-- 指定关联的外键列 -->
<key>
<column name="gid" />
</key>
<one-to-many class="entity.Student" />
</set>
测试类:
//将学生添加到班级
public static void add(){
Grade g = new Grade("JAVA1","JAVA软件开发一班");
Student stu1 = new Student("张三","男");
Student stu2 = new Student("青青","男");
//如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关联关系
g.getStudents().add(stu1);
g.getStudents().add(stu2);
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(g);
session.save(stu1);
session.save(stu2);
tx.commit();
HibernateUtil.closeSession(session);
}
//查询班级学生信息
public static void findStudentsByGrade(){
Session session = HibernateUtil.getSession();
Grade grade = (Grade) session.get(Grade.class, 1);
System.out.println(grade.getGname()+","+grade.getGdesc());
Set<Student>students = grade.getStudents();
for(Student stu : students){
System.out.println(stu.getSname()+","+stu.getSex());
}
}
单向多对一的配置
在多方的hbm.xml文件中,使用标签配置
如:
<!-- 配置多对一关联配置 -->
<many-to-one name="grade" class = "entity.Grade" column="gid"></many-to-one>
当双方关系都配置好后,即双向映射已经配置
测试:
//保存,测试多对一映射
public static void save(){
Grade g = new Grade("JAVA1","JAVA软件开发一班");
Student stu1 = new Student("呵呵","男");
Student stu2 = new Student("小美","女");
//设置关联关系
g.getStudents().add(stu1);
g.getStudents().add(stu2);
stu1.setGrade(g);
stu2.setGrade(g);
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
session.save(g);
//session.save(stu1);
//session.save(stu2);
tx.commit();
HibernateUtil.closeSession(session);
}
//双向多对一测试
public static void findGradeByStudent(){
Session session = HibernateUtil.getSession();
Student stu = (Student) session.get(Student.class, 2);
Grade grade = stu.getGrade();
System.out.println(stu.getSid()+","+stu.getSname()+","+stu.getSex());
System.out.println(grade.getGid()+","+grade.getGname()+","+grade.getGdesc());
HibernateUtil.closeSession(session);
}
相关知识点:
1.inverse属性的用法
在一对多关联关系中默认有one方维护关联关系,因为是双向一对多关联关系,所以one方需进行两次关联关系的维护
,当在one方设置inverse属性值为true时,反转,即让多方进行关联关系的维护,此时不需要执行update 多方表名(student) set 单方表的主键(多方表中的外键即gid)等于单方某记录的gid值
当sid为值一,sid为值二,,,,(student表中有n个记录则需执行n次操作)这些操作,所以当在one方设置inverse属性值为true时有利于改善系统性能。
2.cascade属性的用法
- 当设置cascade属性部位none时,Hibernate会自动持久化所关联的对象
- cascade属性的常用设置:
- all—>对所有操作进行级联操作
- save-update–>执行保存和更新操作时进行级联操作
- delete–>执行删除操作时进行级联操作
- none–>对所有操作不进行级联操作