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 映射 ...
随机推荐
- 001-springmvc之原理图
1.流程. 2.时序图. 3.方法调用. (0)DispatcherServlet类.提供了HandlerMapping成员关联关系. /** MultipartResolver used by th ...
- zwPython,字王集成式python开发平台,比pythonXY更强大、更方便。
zwPython,字王集成式python开发平台,比pythonXY更强大.更方便. 更强大,内置opencv.cuda/opencl.NLTK自然语言.pygame游戏设计等多个重量级模块库. 更方 ...
- EditPlus 4.3.2487 中文版已经发布(11月12日更新)
新的版本修复了粘贴多重选择文本的问题,以及增加了横向扩展列选模式选择范围的快捷键(Ctrl+Alt+→/←).
- Python numpy有什么用?
NumPy is the fundamental package for scientific computing with Python.就是科学计算包. a powerful N-dimensio ...
- 隐藏Apche、Nginx、PHP的版本号提高网站安全性
隐藏Apache版本号 在apache配置文件httpd.conf中,加入以下代码 ServerTokens Prod ServerSignature Off 隐藏Nginx版本号 在nginx的配置 ...
- P1122 最大子树和(树形dp)
P1122 最大子树和 大水题 随便找一个点做根,蓝后累计子树和. 子树和<0的话不取就行了 顺便找个最大值输出 end. #include<iostream> #include&l ...
- Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句 # python3 # author lizm # datetime 2018-02-01 10:00:00 # -*- co ...
- 2018-2019-1 20189215 《Linux内核原理与分析》第八周作业
可执行程序工作原理 <庖丁解牛>第七章书本知识总结 "目标文件"是指编译器生成的文件,"目标"指的是目标平台,例如x86或x64,它决定了编译器使用 ...
- 如何在命令提示符下编译运行含有Package的java文件
这篇是大二自学Java的时候记下的笔记,中午回顾印象笔记的时候意外看到了这篇.看到多年前写下的文字,我想起那时候我对Java的懵懵懂懂,每天晚上在图书馆照着书写书上的示例代码,为一个中文分号绞尽脑汁, ...
- Markdown中的表格
参考:在简书上用Markdown写表格 | Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | r ...