您的位置:首页 > 其它

Hibernate的关系映射

2015-11-29 21:38 148 查看
        首先我们了解一个名词ORM,全称是(Object Relation Mapping),即对象关系映射,他的实现思想就是将关系数据库中标的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作改成对对象的的操作。Hibernate正式实现了这种思想,但是在数据库中我们要看出他们的关系还相对容易一些,但是要用Hibernate聊描述他们之间的实体关系却是不太容易,所以咱们今天好好的总结一下。

       先说一下Hibernate都有哪几种映射关系,一对一,一对多,多对一,多对多,大概就这么四种。那么咱们系依次说一下。

       一对多

      这总关系非常的常见,例如我们常见的例子有班级和学生,那么一个班级就会有多个学生,在写java代码的时候我们是这样子写的,private Set students;,一句简单的代码,在我们配置他们的关系的时候怎么配置呢,简单,代码如下:

<span style="font-size:18px;"><span style="font-size:18px;"><set name="students">
<key column="classId"></key>
<one-to-many class="Student" />
</set></span>
</span>
      在一对多的关系中,因为我们定义的就是一个Set集合,所以我们也会在配置文件中庸set映射,在班级的映射文件中配置数据库中药保存的列名,一对多中这个多的是哪个实体。

       多对一

      多对一非常的简单,还是上边的例子,班级和学生,班级对于学生就是一对多,那么学生对于班级就是多对一,我们在java代码是这么些的,例如在学生实体中,会private Classes classes;那么在实体关系映射中怎么弄呢。

<span style="font-size:18px;"><many-to-one name="classes" class="Class" column="classId"></many-to-one></span>
      在这个关系映射中,我们需要定义的是名称,是那个类,在数据库中,我们的列名叫神马。

      多对多

       这个关系可能会比较难配,在上边的一对多,多对一,只要我们定义了一边,就可以实现这些控制,但是在多对多的映射中,我们需要两边都有配置。例如学生和课程,一个学生上多门课程,而一门课程也会有多个学生来学习,所以我们如何表达这个关系呢。

       在java代码中,我们是这么写的。在学生实体中private set courses; 在班级实体中private set students;那么班级的实体映射配置中,我们要写的是属性名称,对应的表itcast_student_course,对应的自己的ID:courseId,自己对谁(Student)的关系,对应实体的列,代码如下:

<span style="font-size:18px;"><span style="font-size:18px;">	<!-- 学生students属性,本类与User的多对多 -->
<set name="students" table="itcast_student_course">
<key column="courseId"></key>
<many-to-many class="Student" column="studentId"></many-to-many>
</set></span>
</span>

       这就是咱们课程Course实体的映射文件中需要配置的信息,而学生实体的配置也很类似,代码如下:

<span style="font-size:18px;">	<!-- roles属性,本类与Role的多对多 -->
<set name="course" table="itcast_student_course">
<key column="studentId"></key>
<many-to-many class="Course" column="courseId"></many-to-many>
</set>
</span>

       一对一

      一对一的映射的关键就是让两个实体映射表的主键都一样就可以了。由于一对一关联映射特性的确定性,所以必须 保证id,这样才能foreign映射策略关联对象。例如一个人有一个卡,所以人和卡的关系就可以表示成: <id name="id">
<!-- foreign取得关键对象的标志 -->
<generator class="foreign">
<param name="property">idCard</param>
</generator>
</id>

<property name="name"/>

<!--one-to-one指示hibernate如何关联其他对象,也就是拿到我们的关系字段

constrained="true"表示当前主键也是外键 ,参照了对端的idCard -->
<one-to-one name="idCard" constrained="true"></one-to-one>
       这样我们就实现了Hibernate的最常用的一些关键映射,当然我们查资料的话说的是7中,其实就这4中,一对多,多对一,多对多,一对一,只是他们的七种是有双向管理,例如一对多,那么就同时加上多对一,其实就这么几种,有了这几种也住够用,
      一对多,确定多的一方,并且确定自己在多的一方的外键名称Student,classId。多对一,找到一,写一的一些属性。多对多,找对方,一对一,确定外键。

     

       
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: