`
KeepCrazy
  • 浏览: 60925 次
社区版块
存档分类
最新评论

hibernate的关联映射

阅读更多
[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]
0
5
分享到:
评论

相关推荐

    hibernate关联映射详解

    hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...

    hibernate关联映射实例

    本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...

    hibernate关联映射的作用和常用属性解释

    ### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...

    Hibernate关联映射总结

    ### Hibernate关联映射总结 #### 一、基础知识 在探讨Hibernate中的关联映射之前,我们需要先理解几个基本概念,这将有助于我们更好地理解和应用这些关联映射。 - **主键**(Primary Key):主键是用来唯一标识一...

    Hibernate关联映射

    在 Hibernate 映射中,需要使用 `one-to-one` 元素,并设置 `constrained="true"`,表明该类的主键由关联类生成。 3. Hibernate 一对一连接表单向关联: 这种关联方式是通过额外的连接表来实现一对一关系的。连接...

    Hibernate关联映射.rar

    本教程“Hibernate关联映射.rar”聚焦于Hibernate中的关联映射,特别是多对一和一对多的关系映射,非常适合初学者了解和实践。 首先,我们要理解什么是关联映射。在数据库中,表与表之间存在各种关系,如一对一、一...

    hibernate 全面学习->hibernate 关联映射学习

    总的来说,这个压缩包提供了丰富的Hibernate关联映射的学习资源,涵盖了从基础到进阶的各种关联类型。通过学习这些示例,你将能够熟练掌握如何在Java项目中使用Hibernate进行数据持久化,并灵活地处理各种数据库关系...

    Hibernate 关联映射

    这可能是测试Hibernate关联映射的一个示例项目或者类。通常,这样的测试会包含各种关联映射的实例,如实体类的定义,配置文件或注解,以及测试用例,用于验证关联映射是否按预期工作。 **详细知识讲解:** 1. **一...

    hibernate 关联映射(一) many to one

    本文将深入探讨“Hibernate关联映射中的Many-to-One关系”。 Many-to-One关联是现实世界中常见的关系类型,比如一个学生可以对应多个课程,而一个课程可能被多个学生选修。在数据库中,这通常表现为一对多(One-to-...

    hibernate关联映射

    hibernate关联映射是Hibernate框架中的一个重要概念,它用于在Java对象模型和数据库表之间建立关系,使得数据操作更加方便。以下将详细介绍各种类型的关联映射: 1. **单向N-1关联(无连接表)** 在这种关联中,一...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    在Java的持久化框架Hibernate中,关联映射是至关重要的概念,它允许我们将数据库中的表关系映射到对象之间的关系。SSH(Struts、Spring、Hibernate)是经典的Java Web开发框架,其中Hibernate负责数据访问层,提供了...

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

    hibernate 关联映射(二) one to one(单向)

    本篇文章将深入探讨Hibernate中的关联映射,特别是One-to-One(一对一)关联,这是一种表示两个实体之间一对一关系的映射方式。我们将通过源码分析和实际例子来理解其工作原理。 ### 一、One-to-One关联概述 在...

    hibernate 关联映射(三) one to one(双向)

    在Java的持久化框架Hibernate中,关联映射是核心特性之一,它允许我们将数据库中的表关系映射到对象之间的关系。本篇将深入探讨一种特殊的关联映射方式——一对一(One to One)映射,特别是在双向关联的情况下的...

    Hibernate一对一主键关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...

Global site tag (gtag.js) - Google Analytics