Hibernate一对多、多对一的关系表达
一、关系表达:
1、一对多、多对一表的关系:
学生表:
班级表:
在学生表中,学生的学号是主键。在班级表中,班级号是主键,因此,学生表的外键是classno。因此,班级对应学生是一对多,学生对应班级是多对一。因为,一个班级可以有多个学生,但是一个学生只能在一个班级。
2、对象的一对多、多对一关系:
(1)在Class类中,定义Set集合,表达一对多的关系:
+ View Code
+ View Code
(2)定义学生和班级的关系:
+ View Code
3、配置映射文件:
Class.hbm.xml:
(1)实现一对多的关系映射,即:一个班级对应多个学生:
复制代码
复制代码
复制代码
复制代码
指定映射的存储学生的集合的名字。
复制代码
复制代码
映射的class表的外键。
复制代码
复制代码
指定学生的类型。
(2)实现多对一的关系映射,即:多个学生对应一个班级。
复制代码
复制代码
name属性:映射的班级。
column属性:映射的班级对象对应的外键。
class属性:指定班级的类型。
4、主配置文件:
+ View Code
二、具体运用:
1、增加:
(1)创建一个新班级并为新班级添加两名学生:
复制代码
public class Test {
public static void testSel() {
Session session = HibernateUtils.openSession();//获得session
Transaction transaction = session.beginTransaction();//开启事务
Clas clas=new Clas();
clas.setClassname("计科171");
clas.setClassno(4600);
clas.setDepartment("一号楼");
clas.setMonitor("zhai");
Student student=new Student();
student.setSname("翟");
student.setStudentno(2017151411);
student.setPoint(123f);
student.setSex("男");
student.setBirthday("2019-11-11");
student.setPhone("18739496522");
student.setClassno("221221");
student.setEmail("34288334@qq.com");
Student student1=new Student();
student1.setSname("翟hb");
student1.setStudentno(2017151419);
student1.setPoint(666f);
student1.setSex("女");
student1.setBirthday("2019-11-11");
student1.setPhone("18739496522");
student1.setClassno("221221");
student1.setEmail("34288334@qq.com");
clas.getStudents().add(student);//一对多,一个班级下有多个学生
clas.getStudents().add(student1);//获取Set集合对象并向其中添加元素
student.setaClas(clas);//多对一,学生属于哪一个班级
student1.setaClas(clas);
session.save(clas);
session.save(student);
session.save(student1);
transaction.commit();//提交事务
session.close();//关闭资源
}
复制代码
(2)为一个已经存在的班级添加学生:
+ View Code
2、删除:
删除80501班的一名学生信息:
1
2
3
4
5
6
7
8
9
10
public static void testDel() {
Session session = HibernateUtils.openSession();//获得session
Transaction transaction = session.beginTransaction();//开启事务
Clas clas=session.get(Clas.class,80501);//获得要删除的学生属于那一个班级
Student student=session.get(Student.class,937221532);//获得要删除的学生
clas.getStudents().remove(student);
student.setaClas(null);
transaction.commit();//提交事务
session.close();//关闭资源
}
https://www.cnblogs.com/zhai1997/p/11844109.html