多对多
O Student Course 一个学生有多门课程,一个课程有多个学生
* : *
关系属性 Set<Course> Set<Student>
R 如何在数据库中表明多对多的关系,提供第三张表,作为关系表
t_student t_course 关系表 t_s_c
id name age id name score s_id c_id 两列联合唯一
1 haoren 22 1 java 1 1 1
2 clam 23 2 c++ 1 1 2
M 多对多映射文件 三张表两个外建
1.在com.jsu.hb.pojo包中写两个实体类Student.java和Course.java
Student.java
package com.jsu.hb.pojo; import java.util.HashSet; import java.util.Set; public class Student { private Integer id; private String name; private Integer age; /* 关系属性 */ private Set<Course> courses = new HashSet<Course>(); // 提供声明内存关系的工具方法 public void addCourse(Course c) { this.courses.add(c); c.getStudents().add(this); } // 解除关系 public void removeCourse(Course c) { this.courses.remove(c); c.getStudents().remove(this); } //解除所有关系 public void removeAll(){ for(Course c:courses){ c.setStudents(null); } this.courses.clear(); } 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<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; } }
在Course.java中
package com.jsu.hb.pojo; import java.util.HashSet; import java.util.Set; public class Course { private Integer id; private String name; private Integer score; /* 关系属性 */ private Set<Student> students = new HashSet<Student>(); 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 getScore() { return score; } public void setScore(Integer score) { this.score = score; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }
2.R 建表
create table g_student( t_id integer primary key, t_name varchar2(30), t_age integer ) create table g_course( t_id integer primary key, t_name varchar2(30), t_score integer ) --关系表 create table g_s_c( s_id integer references g_student(t_id), c_id integer references g_course(t_id), primary key (s_id,c_id) )
3.M 提供映射的配置文件没m2m.hbm.xml文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.jsu.hb.pojo"> <class name="Student" table="g_student"> <id name="id" column="t_id"> <generator class="increment"></generator> </id> <property name="name" column="t_name"></property> <property name="age" column="t_age"></property> <!-- 配置关系属性 多对多 三张表两个外键 --> <set name="courses" table="g_s_c" cascade="save-update" inverse="true"> <key column="s_id"></key><!-- 由当前对象提供的第一个外键 --> <many-to-many class="Course" column="c_id"></many-to-many> </set> </class> <class name="Course" table="g_course"> <id name="id" column="t_id"> <generator class="increment"></generator> </id> <property name="name" column="t_name"></property> <property name="score" column="t_score"></property> <!-- 配置关系属性 多对多 三张表两个外键 --> <set name="students" table="g_s_c" cascade="save-update"> <key column="c_id"></key><!-- 由当前对象提供的第一个外键 --> <many-to-many class="Student" column="s_id"></many-to-many> </set> </class> </hibernate-mapping>
4.在hibernate.cfg.xml文件中对映射文件进行注册
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- show_sql:是否显示hibernate执行的SQL语句,默认为false --> <property name="show_sql">true</property> <!-- show_sql:是否显示hibernate执行格式化输出的SQL语句,默认为false --> <property name="format_sql">true</property> <!-- 配置与数据库连接的参数 --> <property name="connection.driver_class">oracle.jdbc.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property> <!-- 2.自身属性相关的配置 dialect:方言 hibernate根据dialect的配置进行特定数据性能方面的调优 --> <property name="dialect">org.hibernate.dialect.Oracle9iDialect</property> <mapping resource="com/jsu/hb/pojo/m2m.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
5.提供获得Session的配置文件HibernateUtil.java
package com.jsu.hb.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sf; private static ThreadLocal<Session> tl= new ThreadLocal<Session>(); static{ try{ Configuration cfg = new Configuration(); cfg.configure(); sf=cfg.buildSessionFactory(); }catch(Exception e){ e.printStackTrace(); } } public static Session openSession(){ return sf.openSession(); } public static Session getCurrentSession(){ Session session = tl.get();//先从储存的线程中查找 if(session==null){ session=openSession(); tl.set(session); return session; } return session; } }
6.在测试类中TestM2M.java中
package com.jsu.hb.test; import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test; import com.jsu.hb.pojo.Course; import com.jsu.hb.pojo.Student; import com.jsu.hb.util.HibernateUtil; public class TestM2M { public static Student getStu(){ Student s = new Student(); s.setName("leon"); s.setAge(23); Course c1 = new Course(); c1.setName("java"); c1.setScore(5); Course c2 = new Course(); c2.setName("c++"); c2.setScore(4); // 在内存中设定关系 s.addCourse(c1); s.addCourse(c2); return s; } @Test public void save(){ Session session = HibernateUtil.getCurrentSession(); Transaction tx = session.getTransaction(); tx.begin(); session.save(getStu()); tx.commit(); } @Test public void del(){ Session session = HibernateUtil.getCurrentSession(); Transaction tx = session.getTransaction(); tx.begin(); Student s = (Student)session.get(Student.class, 2); s.removeAll(); session.delete(s); //Course c = (Course)session.get(Course.class, 3); //session.delete(c); tx.commit(); } }
发表评论
-
Hibernateday06 QBC(Query by Criteria)
2012-07-24 16:59 866QBC (Query by Criteria)由hiberna ... -
Hibernateday06 SQLQuery 和NameQuery
2012-07-24 16:58 1252SqlQuery:在hibernate中使用sql Q ... -
Hibernateday06 HQL(Hibernate Query Language)
2012-07-21 22:18 1209HQL(hibernate query language) ... -
Hibernateday06学习笔记
2012-07-21 21:58 978HQL(hibernate query language) ... -
Hibernateday05继承关系union-subclass映射策略
2012-07-21 21:43 1017union-subclass映射策略 特点:父表 ... -
Hibernateday05继承关系joined-subclass映射策略
2012-07-21 00:07 8372.joined-subclass映射策略 特点:父 ... -
Hibernateday05继承关系subclass映射策略
2012-07-21 00:00 7632.继承关系 O Product //产品 ... -
Hibernateday05由一个主键类,将对象当中的联合作为主键的属性描述成一个对象【主键类的复合主键】
2012-07-20 23:53 8812.由一个主键类,将对象当中的联合作为主键的属性描述成一个对象 ... -
Hibernateday05对象当中的几个属性组合作为表的主键【实体类属性的复合主键】
2012-07-20 23:47 871复合主键 注意:1.对象必须实现序列化接口 1. ... -
Hibernateday05主键生成器(hilo)
2012-07-20 23:36 961主键生成器 generator class="xxx ... -
Hibernateday05学习笔记
2012-07-20 23:24 8111.一对多自身相关 员工找经理 关系属性 Emp ... -
Hibernateday04一对多的自身相关(双向关系)
2012-07-19 01:04 735自身相关的双向关系 class Emp{ Inte ... -
Hibernateday04一对多的自身相关(从经理找员工)
2012-07-19 00:21 730从经理找员工{1:*} class Emp{ Integ ... -
Hibernateday04一对多的自身相关(从员工找经理)
2012-07-18 23:45 790对多的自身相关 以Emp表为例:一个雇员会有多个下属, ... -
Hibernateday04学习笔记
2012-07-18 23:19 663一对多 O Dept ... -
Hibernateday03一对多双向操作
2012-07-17 23:44 6731.建表 create table g_dept( ... -
Hibernateday03一对多单向操作
2012-07-17 22:37 764一对多 1:* Employee ... -
Hibernateday03学习笔记
2012-07-17 22:25 6001.Hibernate关联关系 一对一的关联关系 1 ... -
Hibernateday02表的唯一外键
2012-07-24 16:57 863一对一:唯一外键:为外键加上唯一约束 公司 Com ... -
Hibernateday02表的共享主键
2012-07-16 21:55 798关联关系 1:1 人 Person ...
相关推荐
3. **关系映射(Relationship Mapping)**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)关系。 ### 五、Hibernate操作 1. **对象状态**:Hibernate对象有瞬时态...
1. **Hibernateday1.doc** 和 **Hibernateday2.doc**:可能是连续两天的Hibernate学习笔记,可能涵盖了Hibernate的基础知识,包括安装配置、对象关系映射的基本概念等,也有可能涉及HQL的初步介绍。 2. **HQL基础...
通过学习和分析`hibernateDay3`中的源码,你可以更深入地理解这些概念,并且能够熟练地配置和使用Hibernate框架。这将有助于提升你在实际项目中的开发效率,降低与数据库交互的复杂性。记住,实践是最好的老师,动手...
这些IDE通常都有内置的对Hibernate的支持,方便我们创建和配置项目。 3. **Maven或Gradle**:为了管理项目的依赖,推荐使用Maven或Gradle构建系统。这两个工具可以帮助我们自动下载并管理Hibernate和其他所需的库。...
基于智能温度监测系统设计.doc
包括userCF,itemCF,MF,LR,POLY2,FM,FFM,GBDT+LR,阿里LS-PLM 基于深度学习推荐系统(王喆)
2023-04-06-项目笔记-第三百五十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.353局变量的作用域_353- 2024-12-22
和美乡村城乡融合发展数字化解决方案.docx
基于Python的深度学习图像识别系统是一个利用卷积神经网络(CNN)对图像进行分类的先进项目。该项目使用Python的深度学习库,如TensorFlow,构建和训练一个模型,能够自动识别和分类图像中的对象。系统特别适合于图像处理领域的研究和实践,如计算机视觉、自动驾驶、医疗影像分析等。 项目的核心功能包括数据预处理、模型构建、训练、评估和预测。用户可以上传自己的图像或使用预定义的数据集进行训练。系统提供了一个直观的界面,允许用户监控训练进度,并可视化模型的性能。此外,系统还包括了一个模型优化模块,通过调整超参数和网络结构来提高识别准确率。 技术层面上,该项目使用了Python编程语言,并集成了多个流行的机器学习库,如NumPy、Pandas、Matplotlib等,用于数据处理和可视化。模型训练过程中,系统会保存训练好的权重,以便后续进行模型评估和预测。用户可以通过简单的API调用,将新的图像输入到训练好的模型中,获取预测结果。
拳皇97.exe拳皇972.exe拳皇973.exe
基于python和协同过滤算法的电影推荐系统 基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法
DEV-CPP-RED-PANDA
Python语言求解旅行商问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等。
pdfjs 用于在浏览器中查看/预览/打印pdf。 pdfjs 2.5.207 支持firefox/chrome/edge/ie11以上版本。 如果需要支持旧版本浏览器,可以使用这个,是未修改过的原版,支持打印和下载按钮。亲测有效。 pdf 4.9.155分两个包: pdfjs-4.9.155-dist.zip pdfjs-4.9.155-legacy-dist.zip
建设项目现场高温人员中暑事故应急预案
数据结构上机实验大作业-线性表选题.zip
【资源说明】 基于高德地图的校园导航全部资料+详细文档+高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
【静态站群程序视频演示,只有视频,不含程序,下载须知】【静态站群程序视频演示,只有视频,不含程序,下载须知】全自动批量建站快速养权重站系统【纯静态html站群版】:(GPT4.0自动根据关键词写文章+自动发布+自定义友链+自动文章内链+20%页面加提权词)
9.30 SWKJ 男头7张+女头2张.zip
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea、vscode 数据库:MySql5.7以上 部署环境:maven 数据库工具:navicat