多对多
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 873QBC (Query by Criteria)由hiberna ... -
Hibernateday06 SQLQuery 和NameQuery
2012-07-24 16:58 1256SqlQuery:在hibernate中使用sql Q ... -
Hibernateday06 HQL(Hibernate Query Language)
2012-07-21 22:18 1216HQL(hibernate query language) ... -
Hibernateday06学习笔记
2012-07-21 21:58 988HQL(hibernate query language) ... -
Hibernateday05继承关系union-subclass映射策略
2012-07-21 21:43 1028union-subclass映射策略 特点:父表 ... -
Hibernateday05继承关系joined-subclass映射策略
2012-07-21 00:07 8422.joined-subclass映射策略 特点:父 ... -
Hibernateday05继承关系subclass映射策略
2012-07-21 00:00 7682.继承关系 O Product //产品 ... -
Hibernateday05由一个主键类,将对象当中的联合作为主键的属性描述成一个对象【主键类的复合主键】
2012-07-20 23:53 8892.由一个主键类,将对象当中的联合作为主键的属性描述成一个对象 ... -
Hibernateday05对象当中的几个属性组合作为表的主键【实体类属性的复合主键】
2012-07-20 23:47 881复合主键 注意:1.对象必须实现序列化接口 1. ... -
Hibernateday05主键生成器(hilo)
2012-07-20 23:36 966主键生成器 generator class="xxx ... -
Hibernateday05学习笔记
2012-07-20 23:24 8151.一对多自身相关 员工找经理 关系属性 Emp ... -
Hibernateday04一对多的自身相关(双向关系)
2012-07-19 01:04 744自身相关的双向关系 class Emp{ Inte ... -
Hibernateday04一对多的自身相关(从经理找员工)
2012-07-19 00:21 735从经理找员工{1:*} class Emp{ Integ ... -
Hibernateday04一对多的自身相关(从员工找经理)
2012-07-18 23:45 798对多的自身相关 以Emp表为例:一个雇员会有多个下属, ... -
Hibernateday04学习笔记
2012-07-18 23:19 670一对多 O Dept ... -
Hibernateday03一对多双向操作
2012-07-17 23:44 6841.建表 create table g_dept( ... -
Hibernateday03一对多单向操作
2012-07-17 22:37 782一对多 1:* Employee ... -
Hibernateday03学习笔记
2012-07-17 22:25 6061.Hibernate关联关系 一对一的关联关系 1 ... -
Hibernateday02表的唯一外键
2012-07-24 16:57 867一对一:唯一外键:为外键加上唯一约束 公司 Com ... -
Hibernateday02表的共享主键
2012-07-16 21:55 805关联关系 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和其他所需的库。...
11KW OBC两电平pfc+cllc仿真源码实现:单相与三相兼容版双向控制研究,11KW OBC两电平pfc+cllc仿真源码实现:单相与三相兼容版,实现双向控制策略,11KW OBC两电平pfc+cllc仿真,源代码实现。 注意:已成单相,三相兼容版仿真文件。 双向控制。 ,核心关键词:11KW OBC两电平pfc; CLLC仿真; 源代码实现; 单相三相兼容; 双向控制。,11KW OBC单相与三相兼容版仿真:两电平PFC+CLLC双向控制源代码实现
3GPP R15 38.331 5G NR无线资源控制(RRC)协议规范解析
五运六气YUNQI_V471_SRC_D1023
19考试真题最近的t63.txt
基于MATLAB的牛拉法电力系统潮流计算程序,结合BPA方法,附参考文献,适合基础学习与拓展创新,基于MATLAB的牛拉法电力系统潮流计算程序:涵盖基础学习与拓展创新,附参考文献,牛拉法电力系统潮流计算 MATLAB编写潮流计算程序 BPA计算潮流 另外包含参考文献 这个程序把潮流计算的一般流程包括了,非常适合基础学习,并进一步的进行拓展创新 ,牛拉法; 电力系统潮流计算; MATLAB; BPA计算; 程序编写; 流程; 基础学习; 创新拓展,基于MATLAB的牛拉法电力系统潮流计算程序:基础学习与拓展创新指南
YOLOv11m权重文件
高一-语文-2025年1月张家界市高一期末联考-缺考不计、违纪不计、0分不计_2025-01-16-12-21 (1).zip
android kotlin 版本的贪吃蛇游戏
19考试真题最近的t57.txt
基于疫情封控区域的生活物资配送优化模型:结合遗传算法与模拟退火,实现时间最短和综合满意率最高的路径优化。,疫情下封控区域生活物资配送优化模型:结合遗传算法与模拟退火算法求解路径优化问题,实现时间与满意率双重目标优化。,模型及MATLAB代码:考充分考虑并结合疫情下封控区域生活物资配送问题及车辆路径问题的特点构建物资配送优化模型。 在一般单一目标——时间最短的基础上,加入综合满意率优化目标的路径优化问题 关键词:遗传算法、改进、模拟 火算法,路径优化、CVRP 完整模型+代码+注释 主要内容:以配送时间最短及综合满足率最高为目标,充分考虑并结合疫情下封控区域生活物资配送问题及车辆路径问题的特点构建物资配送优化模型,为疫情下生活物资配送找到了更好的思路。 在模型设计与求解问题上,首先设计标准遗传算法,继而对算法加以改进,最后设计出了改进遗传-模拟 火算法对模型进行求解。 还有参数灵敏度分析等。 服务内容:脚本 工具 部分展示如下: ,关键词:疫情下物资配送;车辆路径问题;优化模型;遗传算法;改进;模拟退火算法;CVRP;参数灵敏度分析;脚本工具;时间最短;综合满意率。 核心关键词用分号分
## 01、数据介绍 动态能力理论最早由提斯(Teece)与皮萨洛(Pisano)于1994年正式提出,他们将动态能力定义为“能够创造新产品和新过程,以及对变化的市场环境做出响应的一系列能力”。 动态能力具体体现在吸收能力、创新能力和适应能力三个方面。这些能力使公司能够快速适应市场变化,抓住新的商业机会,从而保持或提升竞争优势。 数据名称:上市公司-动态能力数据 数据年份:2012-2023年 ## 02、相关数据及指标 证券代码 证券名称 年份 Symbol RD IA ACV DC
基于ASIO的插件式服务器,支持TCP, UDP, 串口,Http, Websocket,统一化的数据接口,隔离开发人员和IO之间的操作。可以快速迭代。PSS 是针对不同 IO 逻辑的插件管理系统。您可以忽略 IO 建立的细节,构建自己的 logic 应用程序。PSS 封装了 Tcp、udp、kcp、串行端口、http、websocket 和 ssl 的统一接口。您可以使用 配置文件 或 统一接口 来创建和使用它们。logic plug-in 是完成数据到达后的 logic 处理,全部以动态库的形式加载,将 IO 和 logic 本身的耦合分开。简单的逻辑开发。本项目由三部分组成 (1) 主机(2) 数据包分析插件(3) 逻辑处理插件。您可以实现后两个插件来完成您的业务逻辑部署。
电机控制器源码:通用无感BLDC方波控制,高效参数化启动,转速达12w,环控系统一键调节,电机控制器源码:通用无感BLDC方波控制,高效调速,参数宏定义便捷调试,最高电转速达12w,电机控制器,低压无感BLDC方波控制,全部源码,方便调试移植 1.通用性极高,图片中的电机,一套参数即可启动。 2. ADC方案 3.电转速最高12w 4.电感法和普通三段式 5.按键启动和调速 6.开环,速度环,限流环 7.参数调整全部宏定义,方便调试 代码全部源码 ,电机控制器;低压无感BLDC方波控制;全部源码;通用性极高;电转速最高12w;电感法与普通三段式;按键启动调速;开环、速度环、限流环;参数调整宏定义。,通用电机控制器:低压无感BLDC方波控制源码,支持高转速12W,便捷调试移植
基于MPC的电动汽车分布式协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的电动汽车协同自适应巡航控制:上下分层控制与仿真结果展示,基于MPC的分布式电动汽车协同自适应巡航控制,采用上下分层控制方式,上层控制器采用模型预测控制mpc方式,产生期望的加速度,下层根据期望的加速度分配扭矩;仿真结果良好,能够实现前车在加减速情况下,规划期望的跟车距离,产生期望的加速度进行自适应巡航控制。 ,关键词:MPC(模型预测控制); 分布式电动汽车; 协同自适应巡航控制; 上下分层控制方式; 期望加速度; 扭矩分配; 仿真结果良好; 前车加减速; 跟车距离。,基于MPC的分层控制电动汽车自适应巡航系统,仿真实现前车加减速跟车距离自适应
多维度购电与售电模型构建及基于CVaR与WOA优化的收益风险评估方法研究,基于CVaR风险评价及WOA优化的新型售电公司购售电模型与策略仿真研究,建立了一个电公司的购电侧模型和电侧模型,其中购电侧模型包括长期市场业务,现市场业务,可再生能源购电市场业务,分布式电源购电市场业务以及储能租赁市场业务五种类型。 电侧包括均 电价合同和实时电价合同两种类型。 然后在购电模型的基础上,提出了一种基于CVaR的购电收益风险评价方法。 根据电公司的CVaR购电收益风险数学模型,提出了一种基于WOA优化算法的新型购电收益计算方法。 该方法将购电收益风险计算公式作为WOA优化算法的目标函数,然后通过WOA的鲸鱼行走觅食、鲸鱼包围以及鲸鱼螺旋捕食三个步骤计算电公司的最优购电策略。 最后,通过MATLAB仿真工具对本文所研究的基于WOA优化的新型购电收益计算方法进行了仿真分析。 仿真结论验证了通过WOA优化算法得到的购电策略为最优购电策略。 matlab代码 仿真平台:MATLAB平台 代码具有一定的深度和创新性,注释清晰 ,关键词: 1. 购电侧模型; 2. 售电侧模型; 3. 长期/现货/可再生
迅雷软件下载原理介绍.md