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 映射 ...
随机推荐
- Java文件IO流的操作总结
Java中的IO操作涉及到的概念及相关类很多,很容易弄混,今天特来整理总结一下,并附上一份完整的文件操作的代码. 概念解析 读和写 流就是管道,向管道里面写数据用输出流:write 从管道里面读数据, ...
- 一个很大的文件,存放了10G个整数的乱序数列,如何用程序找出中位数。
一.梳理审题 一.看清题目: 注意这个题目的量词,这个文件中有10G个整数,而不是这个文件占了10G的内存空间. 二.一些疑问: 在计算机中我们讲的G.M等都是存储容量的概念,但是一般都会在会面加上B ...
- zw“小数据”理论也碰上了“黑天鹅”
4月上旬,在blog<大数据和高频量化交易 >,我们曾经说过: 实战测试,数据越多,反而会影响精度.目前个人数据分析的一个重点,就是"小"数据.老子<道德经·第六 ...
- AVAudioFoundation(5):音视频导出
本文转自:AVAudioFoundation(5):音视频导出 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 要读写音视频数 ...
- python常见容器属性和方法
`````字符串中反斜杠字符表 转义格式 意义 \' 单引号(') \" 双引号(") \\ 反斜杠(\ ) \n 换行 \r 返回光标至行首 \f 换页 \t ...
- p4c-bm安装
Generates the JSON configuration for the behavioral-model (bmv2).它是用来形成 行为模型BMV2 的 JSON配置 的. Importa ...
- Message: dlopen failed for module ‘x’: file not found
这是未安装bochs-x的缘故 解决方案: sudo apt-get install bochs以后接着安装bochs-x. sudo apt-get install bochs-x 2.bx_dbg ...
- python 浮点数取绝对值
import math print(math.fabs(-2.1)) print(math.fabs(-0.0)) print(math.fabs(10.1)) print(math.fabs(0.0 ...
- DWZ 框架详解
这是一个智障的框架,能别用就别用.
- SQL Server 查询优化 索引的结构与分类
一.索引的结构 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有数据页在磁盘上是如何组织的呢?分两种情 ...