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 映射 ...
随机推荐
- 【深入理解JVM】:类加载器与双亲委派模型
类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因.在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字 ...
- 198. House Robber(动态规划)
198. House Robber You are a professional robber planning to rob houses along a street. Each house ha ...
- FindBugs详解
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- aTool在线工具
在线HTTP POST/GET接口测试工具 - aTool在线工具 地址:http://www.atool.org/httptest.php在线接口测试工具接口测试是测试系统组件间接口的一种测试.接口 ...
- c++第十九天
p109~p110: C风格字符串 特点: 1.不方便,不安全,尽量不使用. 2.必须以 '\0'结束.(只有这样才能使用C风格字符串函数) 3.一般利用指针操作这些字符. 4.可以用字符串字面值来初 ...
- 20145311王亦徐 实验三 "敏捷开发与XP实践"
20145311王亦徐 实验三 "敏捷开发与XP实践"程序设计过程 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上传代码 查看代码是否有修 ...
- 学习Zookeeper之第2章Zookeeper安装
第 2 章 Zookeeper安装 2.1 本地模式安装部署 2.2 配置参数解读 第 2 章 Zookeeper安装 2.1 本地模式安装部署 1)安装前准备: (1)安装 jdk (2)通过 fi ...
- 【spring-boot】 springboot整合quartz实现定时任务
在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用s ...
- python第三方库PIL安装的各种坑
PIL python的图像处理库,pycharm安装屡次失败,始终报错 果断换依旧报错,查遍所有博客, 有给pip加参数的,pip install PIL --allow-external PIL - ...
- python 列表元素的筛选
color = ['Red', 'Green', 'White', 'Black', 'Pink', 'Yellow'] color = [x ,,)] print(color)