hibernate 多对多关系映射
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,学生 和 课程就是一种多对多的关系映射,那么再hibernate中,对于多对多关系在怎么配置?和一些注意的事项?简单测试下。建表实体配置文件和映射测试1。使用oracle ,建表sqlcreate t
千家信息网最后更新 2024年11月24日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安全错误
数据库的锁怎样保障安全
网络信号提示无法连接服务器
北京pdu服务器电源订购
服务器主板没有安全模式
数据库技术与应用设计报告
新科技互联网智能时代
TRM数据库
网络安全基础及应用李丹
秦皇岛网络安全周活动
栾城软件开发入门教程哪里好
潍坊市委网络安全和信息化委员
平板服务器软件被删了怎么找回来
湛江手机软件开发哪家好
掌握网络安全规则
电脑学软件开发好吗
服务器油冷
土地调查数据库是国家秘密
数据库管系统设计
山东嵌入式软件开发公司排名
丽江新华互联网科技可以吗
华为安全服务器
简单数据库实例db
软件开发质量保证各个阶段
傻瓜软件开发工具采集
奉贤区企业软件开发信息中心
桂林市互联网科技公司
我的世界街机小游戏服务器推荐
pg数据库输出结果不要首行
静安区创新软件开发销售方法
软件开发适合买什么电脑配置
建网站需要什么服务器