hibernate 多对多关系映射
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置?和一些注意的事项?简单测试下。建表实体配置文件和映射测试1。使用oracle ,建表sqlcreate t
千家信息网最后更新 2025年11月08日hibernate 多对多关系映射
学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置?
和一些注意的事项?简单测试下。
建表
实体
配置文件和映射
测试
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
为什么 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安全错误
数据库的锁怎样保障安全
两台服务器如何同步数据库
网络安全级别怎样提高
国际数据库的月球陨石切片
类似拼多多软件开发
建数据库怎么发文章
数据库中的选择查询特点
如何把网络安全产品推销出去
连云港浪潮服务器工厂
金科联通网络技术有限公司怎么样
乱接wifi的网络安全检讨书
点歌服务器工作原理
沈阳卓安软件开发有限公司
安卓软件开发的数据库
新型肺炎网络安全视频
一个机柜能放多少个服务器
护苗行动网络安全标语
网络安全板块个股
建立ssh服务器
如何编程实现数据库备份
芦溪县网络安全大队
无锡先进网络技术收购价格
网络安全体会感悟300字
泗阳自动化网络技术联系方式
上海特色软件开发服务电话
数据库日期类型年减法运算
福州星网锐捷网络技术
传图片到ftp服务器
德惠先进网络技术咨询售后服务
能源行业网络安全比赛
企业被网络安全审查