Hibernate的关系映射
2015-11-29 21:38
148 查看
首先我们了解一个名词ORM,全称是(Object Relation Mapping),即对象关系映射,他的实现思想就是将关系数据库中标的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作改成对对象的的操作。Hibernate正式实现了这种思想,但是在数据库中我们要看出他们的关系还相对容易一些,但是要用Hibernate聊描述他们之间的实体关系却是不太容易,所以咱们今天好好的总结一下。
先说一下Hibernate都有哪几种映射关系,一对一,一对多,多对一,多对多,大概就这么四种。那么咱们系依次说一下。
在java代码中,我们是这么写的。在学生实体中private set courses; 在班级实体中private set students;那么班级的实体映射配置中,我们要写的是属性名称,对应的表itcast_student_course,对应的自己的ID:courseId,自己对谁(Student)的关系,对应实体的列,代码如下:
这就是咱们课程Course实体的映射文件中需要配置的信息,而学生实体的配置也很类似,代码如下:
<!-- 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。多对一,找到一,写一的一些属性。多对多,找对方,一对一,确定外键。
先说一下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。多对一,找到一,写一的一些属性。多对多,找对方,一对一,确定外键。
相关文章推荐
- java 解决oracle US7ASCII编码,sql查询时
- Looper
- MFC模态对话框和非模态对话框
- 判断二进制数1的个数
- 【openjudge】踩方格
- C语言中关于数字的一些小程序
- Mysql查询缓存碎片、缓存命中率及Nagios监控
- 1090. Highest Price in Supply Chain
- Jenkins xcodebuild There are no schemes in workspace
- 电脑基本信息
- ios 测试用例
- HDU-3177 Crixalis's Equipment
- TCP/IP详解之:IP选路 动态选路协议
- samba 服务
- 犯错,帮助我们成长
- springIDE
- 发布iOS企业分发(二)(iOS开发环境配置)
- Hive安装(二)之表不见了
- 记录-关于网站的欢迎页,初次进入可见欢迎页,再次进入就直接显示主页了
- Android Studio使用OpenCV的配置方法