千家信息网

hibernate 多对多关系映射

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