hibernate 多对多关系映射
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置?和一些注意的事项?简单测试下。建表实体配置文件和映射测试1。使用oracle ,建表sqlcreate t
千家信息网最后更新 2025年02月04日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 Setcourse = 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 Setstudents = 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安全错误
数据库的锁怎样保障安全
网络安全周 宣传
网络安全最近有什么会议
朝阳节能软件开发多少钱
南昌市软件开发公司
深信服数据库审计作用
华为无线网络技术
网络安全从业人员具备专长
网络安全的语录
人间地狱无兼容服务器
0基础软件开发培训 住宿
杭州千飞盈互联网科技
数据库差异比对工具
信息网络安全法课程体会
网络安全考证有那些
大小球数据库模型
试题数据库出售
丰台区学习网络技术
新华区网络安全和信息化
互联网科技机构
软件开发岗位职责及任职要求
淮北市网络安全宣传周活动
room更新数据库
数据库隔离级别
廊坊网络安全宣传
青少年网络安全知识竞赛答题
游戏美术设计和软件开发
网络安全课小结
建立客户数据库配图
北京erp软件开发价格如何计算
电子政务网络安全管理自查