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配置文件,按照类信息,进行映射。则为双向查询通道的建立。
最新文章
- ps如何裁剪掉图片的不规则区域
- Filter 数组过滤函数精解示例
- C plus plus study note (one)
- SQL SERVER 2000数据库置疑处理
- multiOTP配置安装
- MyEclipse自动生成hibernate实体类和配置文件攻略
- Java第一次实验
- 251. Flatten 2D Vector
- PHP超大文件下载,断点续传下载
- Unreal Engine4 蓝图讲解
- Serif和Sans-serif字体的区别(转)
- 最新samba.tar.gz安装方法
- REDIS安装与配置
- NYOJ--水池数目
- 201521123024 《Java程序设计》第11周学习总结
- LKD: Chapter 6 Kernel Data Structures
- python基础(五)
- 逆向工程vgenerator(三)
- Golang入门教程(十)内建函数
- 用C语言实现窗口抖动
热门文章
- onsubmit不起作用的原因
- Entity Framework 复杂类型(转)
- python 中使用ConfigParser类修改配置文件
- #include <;ntifs.h>;出现PEPROCESS redefinition问题处理
- double保存小数点后两位
- CentOS7.2 安装nginx-1.10.3
- UVa 11732 strcmp()函数(左孩子右兄弟表示法)
- python函数返回局部变量,局部&;全局变量同名问题
- IIS 7.5 配置 php 5.4.22 链接 sql 2008(用PDO链接数据库)
- div框选中状态,倒三角样式