千家信息网

hibernate 多对多关系映射

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置?和一些注意的事项?简单测试下。建表实体配置文件和映射测试1。使用oracle ,建表sqlcreate t
千家信息网最后更新 2026年11月01日hibernate 多对多关系映射

学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置?

和一些注意的事项?简单测试下。


  1. 建表

  2. 实体

  3. 配置文件和映射

  4. 测试



1。使用oracle ,建表sql

create table students(        id number(7) primary key,  name nvarchar2(20),  age number(2))create table course(        id number(7) primary key,  name nvarchar2(20),  time nvarchar2(20))create table st_cou(        st_id references students(id),  cou_id references course(id),  primary key (st_id,cou_id))

2. students 实体

package com.hibernate.entity;import java.util.HashSet;import java.util.Set;public class Students {        private Integer id;        private String name;        private Integer age;                private Set course = new HashSet();        public Integer getId() {                return id;        }        public void setId(Integer id) {                this.id = id;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public Integer getAge() {                return age;        }        public void setAge(Integer age) {                this.age = age;        }        public Set getCourse() {                return course;        }        public void setCourse(Set course) {                this.course = course;        }        public Students(Integer id, String name, Integer age) {                super();                this.id = id;                this.name = name;                this.age = age;        }        public Students() {                super();        }        @Override        public String toString() {                return "Students [id=" + id + ", name=" + name + ", age=" + age + ", course=" + course + "]";        }}

3. course实体

package com.hibernate.entity;import java.util.HashSet;import java.util.Set;public class Course {        private Integer id;        private String name;        private String time;                private Set students = new HashSet();        public Integer getId() {                return id;        }        public void setId(Integer id) {                this.id = id;        }        public String getName() {                return name;        }        public void setName(String name) {                this.name = name;        }        public String getTime() {                return time;        }        public void setTime(String time) {                this.time = time;        }        public Set getStudents() {                return students;        }        public void setStudents(Set students) {                this.students = students;        }        public Course(Integer id, String name, String time) {                super();                this.id = id;                this.name = name;                this.time = time;        }        public Course() {                super();        }        @Override        public String toString() {                return "Course [id=" + id + ", name=" + name + ", time=" + time + "]";        }        }

4.hibernate.cfg.xml 配置

                                oracle.jdbc.OracleDriver                jdbc:oracle:thin:@localhost:1521:xe                zt                zt                                                                org.hibernate.dialect.Oracle10gDialect                true                true                                                thread                                                    

course.hbm.xmc 映射配置

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

5. 测试

查询和更新测试略

查询直接查就可以了,更新查询后,修改值后,更新就可以了。


插入测试,级联插入

@Test        public void inset(){                Session session = HibUtil.getSession();                Transaction tx = session.beginTransaction();                                Course course = new Course(null, "地理", "面貌");                Students students = new Students(null, "蛋蛋", 18);                                students.getCourse().add(course);                // course.getStudents().add(students);这句不用写                session.save(students);                tx.commit();        }

多对多中,插入,只要乙方进行维护就可以,如果二方都写

students.getCourse().add(course);course.getStudents().add(students);

那么插入中,再关联表中,由于乙方已经维护,此时已经存在关联关系,这时候,另一方已进行维护

那么由于已经存在关联关系,这时候会报 违反唯一约束条件


删除测试

@Test        public void delete(){                Session session = HibUtil.getSession();                Transaction tx = session.beginTransaction();                Students students = (Students)session.get(Students.class, 1);                session.delete(students);                tx.commit();        }

执行之后,进入数据库查询,发现,只要是在关联表中存在的,相关学生和课程都会被删除。

配置中,我们配置了级联级别是 all 这中权限过大,慎用。级联级别修改为 save-update


6.注意

1.实体中 我们写关系一方有

private Set course = new HashSet();

为什么 new HashSet();

当我们进行单个插入表时,如果没有new HashSet();

Students students = (Students)session.get(Students.class, 1);Course course = new Course(null, "地理", "面貌");这里的course.getStudents() 是个null 而用null对象.add 会是空指针course.getStudents().add(students);                

2. 级联关系

在关联关系中,要慎用关系,以免对另一方数据操作损失。


测试 配置 关联 实体 查询 一方 更新 乙方 地理 学生 数据 级别 课程 面貌 不用 事项 单个 对象 就是 指针 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网企业 互联网最新的科技有限公司 有木互联网科技 米客互联网科技 融贸通互联网科技 天速互联网络科技有限公司 科技互联网的估值 岳阳华臻互联网科技有限公司 注册互联网科技公司经营范围大全 搜狐科技互联网 互联网科技研发水平 互联网金融科技公司的优势 互联网企业科技类企业如何做账 广州百诚互联网科技有限公司官网 上海乐五互联网科技有限公司 上海同邻互联网科技有限公司规模 世界互联网科技成果奖 中国互联网公司的科技投入 互联网科技博主张洲 华人运通互联网科技公司 广东猪兼强互联网科技有限公司 北京路客互联网科技有限公司 卓越科技(互联网 ) 互联网金融科技平台 沃里互联网科技 深圳前海聚择互联网科技有限公司 创业天下互联网科技有限公司 信承诺互联网科技有限公司 互联网高科技行业有哪些企业 中国互联网公司的科技投入
0