hibernate映射xml文件配置之一对多,多对多
一对多配置
【1】班级和学生模型
--->班级可容纳多个学生
--->学生只能属于一个班级
【2】一对多配置中的关系维护(inverse)
--->一端放弃关系的维护
--->多端进行关系维护。
inverse默认值false,表示不放弃关系的维护。
inverse="true"配置在那一端,表示那一端放弃关系的维护(交由hibernate内部进行维护),由另一端进行关系维护。
班级的ClassRoom.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.bjsxt.shangxiaofei.po"><!-- 实体类包名,如果此处不加package属性,下面所有的class要写全路径:报名+类名 --> <class name="ClassRoom" table="t_classroom"> <!-- 主键递增 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 班级名字 -->
<property name="name" column="name"></property> <!-- 班级的学生,班级对学生 一对多的关系 一端放弃关系的维护,多端进行维护,在set中inverse="true"-->
<set name="students" inverse="true">
<!-- 将班级的主键id在学生表中生成外键 -->
<key column="class_id"></key>
<one-to-many class="Student" />
</set> </class> </hibernate-mapping>
学生的Student.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.bjsxt.shangxiaofei.po"><!-- 实体类包名 --> <class name="Student" table="t_student"> <!-- 主键递增 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 学生名字 -->
<property name="name" column="name"></property>
<!-- 学生性别 -->
<property name="sex" column="sex"></property> <!-- 学生的班级 学生对班级 多对一关系-->
<many-to-one name="classRoom" class="ClassRoom">
<!-- 学生表中的外键,是班级表的主键,此处与另一端指定的外键名必须相同 -->
<column name="class_id"></column>
</many-to-one> </class> </hibernate-mapping>
二多对多配置
【1】学生和课程多对多模型
--->一个学生可以选择多门课程
--->一门课程可以拥有多个学生
【2】多对多配置中的关系维护(inverse)
--->那一端内容修改的频繁,则放弃关系维护(学生放弃关系维护)
--->那一端相对修改较少,那一端进行关系维护
学生的Student.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.bjsxt.shangxiaofei.po"><!-- 实体类包名 --> <class name="Student" table="t_student"> <!-- 主键递增 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 学生名字 -->
<property name="name" column="name"></property>
<!-- 学生性别 -->
<property name="sex" column="sex"></property> <!-- 学生课程,学生对课程 多对多关系 table是中间表的名字 学生信息修改频繁,放弃关系的维护-->
<set name="courses" table="student_course" inverse="true">
<!-- 本表在中间表中的外键 -->
<key column="student_id"></key>
<!-- 本表与对应表的映射关系,对应表在中间表的外键 -->
<many-to-many class="Course" column="course_id"></many-to-many>
</set> </class> </hibernate-mapping>
课程的Course.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.bjsxt.shangxiaofei.po"><!-- 实体类包名 --> <class name="Course" table="t_course"> <!-- 主键递增 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 课程的名字 -->
<property name="name" column="name"></property> <!-- 课程拥有的学生 课程对学生 多对多的关系 table表示中间表的名字 -->
<set name="students" table="student_course">
<!-- 本表在中间表的外键 -->
<key column="course_id"></key>
<!-- 本表与对应表的映射关系,column表示对应表在中间表的外键名字 -->
<many-to-many class="Student" column="student_id"></many-to-many>
</set>
</class> </hibernate-mapping>
三hibernate的查询通道的建立:
[1]单向关联
--->只能通过A端查询到B端。利用面向对象的思想,也就是hql语句。
--->如果想从B端查询到A端,就需要写原始sql语句。
例子:学生和班级模型 student ---classRoom
单向:在student类中建立classRoom的属性。而在ClassRoom的类中,不要建立Set<Student>的集合类。
映射xml文件按照类信息配置,也就是说只有一端有配置。则为单向查询通道的建立。
[2]双向关联
--->通过A端可以查询到B端,通过B端也可以查询到A端
--->双向查询,不需要写原始sql语句,只需要按着面向对象的思想操作数据库。hql
例子:学生班级模型 student-classRoom
在Student类中建立ClassRoom的属性。在ClassRoom的类中建立Set<Student> 的集合属性。然后xml配置文件,按照类信息,进行映射。则为双向查询通道的建立。
hibernate映射xml文件配置之一对多,多对多的更多相关文章
- hibernate.hbm.xml文件配置入门小结(1)
在Hibernate中,各表的映射文件xxx.hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具. hibernate.hbm.xml文件的基本结构如下 ...
- Spring整合Hibernate的XML文件配置,以及web.xml文件配置
利用Spring整合Hibernate时的XML文件配置 applicationContext.xml <?xml version="1.0" encoding=" ...
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- hibernate.cfg.xml文件的配置模板和不同数据库的配置參数
(1)hibernate.cfg.xml文件的配置模板 <?xml version="1.0" encoding="UTF-8"?> <!DO ...
- MyBatis Spring整合配置映射接口类与映射xml文件
本文转自http://blog.csdn.net/zht666/article/details/38706083 Spring整合MyBatis使用到了mybatis-spring,在配置mybati ...
- Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式
①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...
- 将hibernate.cfg.xml文件都放到spring中时报错
报错如下所示: 私以为是配置文件出现问题了. <?xml version="1.0" encoding="UTF-8"?> <beans xm ...
- Hibernate使用xml文件的每个类层次一张表
通过这种继承策略,我们可以通过单表映射整个层次结构. 这里,在表中创建一个额外的列(也称为discriminator列)来标识该类. 让我们先了解问题.下面给出的整个层次类映射到数据库的一个表中图解说 ...
- MyBatis 入门到精通(二) SQL语句映射XML文件
MyBatis 真正强大之处就在这些映射语句,也就是它的魔力所在.对于它的强大功能,SQL 映射文件的配置却非常简单. 如果您比较SQL 映射文件配置与JDBC 代码,您很快可以发现,使用SQL 映射 ...
随机推荐
- #C++初学记录 (第一次测试)(A - 复习时间 )
练习题目一 (A-复习时间) 为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑.xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的 ...
- 2017-2018 ACM-ICPC East Central North America Regional Contest (ECNA 2017) Solution
A:Abstract Art 题意:给出n个多边形,求n个多边形分别的面积和,以及面积并 思路:模板 #include <bits/stdc++.h> using namespace st ...
- CodeForces - 366C Dima and Salad (01背包)
题意:n件东西,有属性a和属性b.要选取若干件东西,使得\(\frac{\sum a_j}{\sum b_j} = k\).在这个条件下,问\(\sum a_j\)最大是多少. 分析:可以将其转化为0 ...
- Common Knowledge
2014-08-23 11:01:11 -6:四面体 (1)内切球半径:r = 3V / (S1+S2+S3+S4) (2)体积:将四点组成三个向量AB,AC,AD,向量的混合积就是它们组成的平行六面 ...
- ng-深度学习-课程笔记-10: 机器学习策略2(Week2)
1 误差分析( Carrying out error analysis ) 假设你训练了一个猫的二分类模型,在开发集上的错误率是10%,你想分析这10%的错误率来自哪里,怎么做呢? 先把这些错分的图片 ...
- HTTP从入门到入土(2)——HTTP协议发展历史
HTTP协议的发展历史 HTTP/0.9 0.9版本是第一个定稿的HTTP版本,相对较为简陋.它有以下特点: 只有一个命令GET 没有header等描述数据的信息 服务器发送完毕,就关闭TCP连接 注 ...
- bzoj1630 / bzoj2023 [Usaco2005 Nov]Ant Counting 数蚂蚁
Description 有一天,贝茜无聊地坐在蚂蚁洞前看蚂蚁们进进出出地搬运食物.很快贝茜发现有些蚂蚁长得几乎一模一样,于是她认为那些蚂蚁是兄弟,也就是说它们是同一个家族里的成员.她也发现整个 ...
- bzoj1622 / P2908 [USACO08OPEN]文字的力量Word Power
P2908 [USACO08OPEN]文字的力量Word Power 第一眼:AC自动机(大雾) 直接暴力枚举即可. 用<cctype>的函数较方便(还挺快) $isalpha(a)$:$ ...
- 使用 v-cloak 防止页面加载时出现 vue.js 的变量名
知识点:使用 v-cloak 防止页面加载时出现 vue.js 的变量名 场景:在使用vue语法,实现下拉框功能时,展示数据列表之前,出现对应的 vuejs 变量名 代码: var vm = new ...
- Codeforces Round #408 (Div. 2) C. Bank Hacking
http://codeforces.com/contest/796/problem/C Although Inzane successfully found his beloved bone, Zan ...