一对多配置

【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配置文件,按照类信息,进行映射。则为双向查询通道的建立。

最新文章

  1. ps如何裁剪掉图片的不规则区域
  2. Filter 数组过滤函数精解示例
  3. C plus plus study note (one)
  4. SQL SERVER 2000数据库置疑处理
  5. multiOTP配置安装
  6. MyEclipse自动生成hibernate实体类和配置文件攻略
  7. Java第一次实验
  8. 251. Flatten 2D Vector
  9. PHP超大文件下载,断点续传下载
  10. Unreal Engine4 蓝图讲解
  11. Serif和Sans-serif字体的区别(转)
  12. 最新samba.tar.gz安装方法
  13. REDIS安装与配置
  14. NYOJ--水池数目
  15. 201521123024 《Java程序设计》第11周学习总结
  16. LKD: Chapter 6 Kernel Data Structures
  17. python基础(五)
  18. 逆向工程vgenerator(三)
  19. Golang入门教程(十)内建函数
  20. 用C语言实现窗口抖动

热门文章

  1. onsubmit不起作用的原因
  2. Entity Framework 复杂类型(转)
  3. python 中使用ConfigParser类修改配置文件
  4. #include &lt;ntifs.h&gt;出现PEPROCESS redefinition问题处理
  5. double保存小数点后两位
  6. CentOS7.2 安装nginx-1.10.3
  7. UVa 11732 strcmp()函数(左孩子右兄弟表示法)
  8. python函数返回局部变量,局部&amp;全局变量同名问题
  9. IIS 7.5 配置 php 5.4.22 链接 sql 2008(用PDO链接数据库)
  10. div框选中状态,倒三角样式