[size=large]
前面介绍的Hibernate基本映射能反映出实例类和数据表格之间的映射关系,但若要体现出表格和表格、实体类和实体类之间的关系, 还得用到关联映射。
hibernate中的关联映射包括一对多(和多对一)、多对多、组件映射和继承。下面以学生选课系统为例介绍前两者。(这个系统中暂时还没有能反映组件映射和继承的表格, 很难空口讲清楚, 所以今天不说这两个了...)
一对多映射。在学生选课系统中, 专业和学生(n方和1方)之间是很明显的一对多关系:一个专业中包含很多(>=1)学生。这种关系用代码来实现的步骤为(在基本映射的基础上):
1. 在专业Major类(n方)中添加Set<Stu> stus属性(1方), 并添加相应的setter和getter方法:
private Set<Stu>stus;
public Set<Stu> getStus() {
return stus;
}
public void setStus(Set<Stu> stus) {
this.stus = stus;
}
在Major.hbm.xml中添加:
<!--一对多-->
<!--name为属性名;column为1方表中的外键列-->
<set name="stus">
<key column="major_id"/>
<one-to-many class="blog.pojo.Stu"/>
</set>
2. 在学生Stu类(1方)中添加n方的属性字段:
private Major major;
public Major getMajor() {
return this.major;
}
public void setMajor(Major major) {
this.major = major;
}
在其映射文件中添加:
<many-to-one name="major" class="blog.pojo.Major" column="major_id"/>
这样,Major和Stu之间的一对多和多对一关系就配置完成了.也可以按照需求只对一方进行配置。
然后测试。使用关联映射时注意不要过早关闭session,因为它使用了延迟加载。若想取消延迟加载, 可在关联元素中添加fetch="join"(在上篇总结中说过, 不推荐这样写)。
一对多映射也可以使用List集合, 但在配置文件上更麻烦, 对数据表格也有特殊的要求, 所以, 若能使用Set, 就尽量使用Set.
使用关联映射进行查询的效果类似于多表查询, 而使用它进行数据的增删改操作则可以达到sql的级联操作效果。
如:
Stu stu=new Stu();
stu.setName("LiHua");
Major major=new Major();
major.setName("Literature");
major.setStuNum(100);
stu.setMajor(major);
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
session.save(stu);
tx.commit();
session.close();
这段代码不仅往数据库里添加了一个stu记录, 还添加了一个新的major记录。在运行代码之前还需要添加一个配置:
在Stu.hbm.xml中的major属性中添加:cascade="all",它的意思是允许所有级联操作。若少了这个配置, 运行时会报错。
在级联操作中还有关系维护问题, 在此就不多说了^^.
测试代码见TestOneToMany类.
多对多映射。 一名学生可以同时选多门课程, 一门课程也可以同时有很多学生来选. 所以在stu表和course表之间存在着多对多关系.
多对多关系的建立除了需要两个n方(stu和course)外, 还需要一张关联表(stu_course)来定义两个n方的对应关系。
此映射的代码实现过程为:
1. 在两个n方实体类中分别添加对方的set集合属性及set和get方法, 如在Stu类中:
private Set<Course>courses;
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
在两个映射文件中添加元素:
<set name="属性名" table="关联表名">
<key column="此类在关联表中对应的列"></key>
<many-to-many class="另一方的类名" column="另一方在关联表中对应的列"></many-to-many>
</set>
如在stu.hbm.xml中添加:
<set name="courses" table="stu_course">
<key column="stu_id"></key>
<many-to-many class="blog.pojo.Course" column="course_id"></many-to-many>
</set>
然后, 测试(见TestManyToMany类。 写一部分测一部分应该是一个好习惯吧!)
[/size]
分享到:
相关推荐
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...
本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...
### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...
在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,表明该类的主键由关联类生成。 3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接...
本教程“Hibernate关联映射.rar”聚焦于Hibernate中的关联映射,特别是多对一和一对多的关系映射,非常适合初学者了解和实践。 首先,我们要理解什么是关联映射。在数据库中,表与表之间存在各种关系,如一对一、一...
总的来说,这个压缩包提供了丰富的Hibernate关联映射的学习资源,涵盖了从基础到进阶的各种关联类型。通过学习这些示例,你将能够熟练掌握如何在Java项目中使用Hibernate进行数据持久化,并灵活地处理各种数据库关系...
这可能是测试Hibernate关联映射的一个示例项目或者类。通常,这样的测试会包含各种关联映射的实例,如实体类的定义,配置文件或注解,以及测试用例,用于验证关联映射是否按预期工作。 **详细知识讲解:** 1. **一...
本文将深入探讨“Hibernate关联映射中的Many-to-One关系”。 Many-to-One关联是现实世界中常见的关系类型,比如一个学生可以对应多个课程,而一个课程可能被多个学生选修。在数据库中,这通常表现为一对多(One-to-...
hibernate关联映射是Hibernate框架中的一个重要概念,它用于在Java对象模型和数据库表之间建立关系,使得数据操作更加方便。以下将详细介绍各种类型的关联映射: 1. **单向N-1关联(无连接表)** 在这种关联中,一...
在Java的持久化框架Hibernate中,关联映射是至关重要的概念,它允许我们将数据库中的表关系映射到对象之间的关系。SSH(Struts、Spring、Hibernate)是经典的Java Web开发框架,其中Hibernate负责数据访问层,提供了...
本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...
本篇文章将深入探讨Hibernate中的关联映射,特别是One-to-One(一对一)关联,这是一种表示两个实体之间一对一关系的映射方式。我们将通过源码分析和实际例子来理解其工作原理。 ### 一、One-to-One关联概述 在...
在Java的持久化框架Hibernate中,关联映射是核心特性之一,它允许我们将数据库中的表关系映射到对象之间的关系。本篇将深入探讨一种特殊的关联映射方式——一对一(One to One)映射,特别是在双向关联的情况下的...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...