`

Hibernate之关联表

阅读更多
这个例子好像是IBM Dev上的Hibernate介绍,被人改编过了,我再改编一次,呵呵:P

重点是弄清Hibernate中两个表间一对一、一对多、多对多的关联,数据模式如图:
建表后插入些数据,如下:
select * from classes
+-----------+----------+
| ClassesId | name     |
+-----------+----------+
| 200201    | pro j2ee |
+-----------+----------+
select * from students
+------------+----------+-----------+
| StudentId  | name     | ClassesId |
+------------+----------+-----------+
| s_20020001 | andjia   | 200201    |
| s_20020002 | vincent  | 200201    |
| s_20020003 | mor      | 200201    |
+------------+----------+-----------+
select * from courses
+----------+---------------+
| CourseId | name          |
+----------+---------------+
| c_001    | computer-java |
| c_002    | computer-c++  |
+----------+---------------+
select * from address
+------------+------+--------+-------+--------+
| AddressId  | City | Street | State | Zip    |
+------------+------+--------+-------+--------+
| s_20020001 | as   | sd     | zse   | 123333 |
| s_20020002 | bj   | hd     | bj    | 123456 |
| s_20020003 | bb   | cc     | fdse  | 121333 |
+------------+------+--------+-------+--------+
select * from student_course_link
+----------+------------+
| CourseId | StudentId  |
+----------+------------+
| c_001    | s_20020001 |
| c_001    | s_20020002 |
| c_002    | s_20020002 |
| c_002    | s_20020003 |
+----------+------------+
student与address之间是1对1
student与classes之间是n对1
student与courses之间是n对n

OK,我们来看hbm.xml的写法,先看最关键的student.hbm.xml



<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class name="xxxxxxx.hibernate.Student"
        table="Students"
        dynamic-update="false"
    >
        <id name="id"
            column="StudentId"
            type="string"
            unsaved-value="any"
        >
            <generator class="assigned"/>
        </id>
        <property
            name="name"
            type="string"
            update="true"
            insert="true"
            column="Name"
        />
        <set name="courses"
            table="Student_Course_Link"
            lazy="false"
            inverse="false"
            cascade="all"
            sort="unsorted"
        >
              <key column="StudentId"/>
              <many-to-many class="xxxxxxx.hibernate.Course"
                  column="CourseId"
                  outer-join="auto"
              />
        </set>
        <many-to-one
            name="classes"
            class="xxxxxxx.hibernate.Classes"
            cascade="none"
            outer-join="auto"
            update="true"
            insert="true"
            column="ClassesId"
        />
         <one-to-one
            name="address"
            class="xxxxxxx.hibernate.Address"
            cascade="none"
            outer-join="auto"
            constrained="false"
        />      
    </class>
</hibernate-mapping>




后面many-to-one和one-to-one比较简单,主要是many-to-many这块,必须制定关联键,而且在Student的Bean里,要设一个Set,而不是一个对象,如下
public class Student
{
   /**属性,和students表中的字段对应**/
   private String id;
   private String name;
   /**和其它类之间的映射关系**/
   private Set courses;
   private Classes classes;
   private Address address;
而在其他3个类的映射文件中,Address和一般的Bean完全一样,Classes类有个Set的私有域,用来存放多个学生,同样指定关联键
        <set
            name="students"
            ……
        >
              <key column="ClassesId"/>
              <one-to-many class="xxxxxxs.hibernate.Student"/>
        </set>
Course类的映射文件中的many-to-many与Student中的一样,就相应的表名等等正好颠倒一下。

于是我们可以根据StudentID取得一个Student对象,其中包含了对应的Course等信息,如:
Student st=(Student)sess.load(Student.class,request.getParameter("studentId"));
Set courses=st.getCourses();
for(Iterator it=courses.iterator();it.hasNext();){    
    Course course=(Course)it.next();
    ……      
}

  • 大小: 9.4 KB
分享到:
评论

相关推荐

    hibernateHQL关联查询

    在理解Hibernate HQL关联查询之前,我们需要先回顾一下数据库表连接的基本概念及其分类。数据库表连接主要分为以下几种: 1. **内连接(Inner Join)**:只返回两个表中满足连接条件的记录。如果某条记录在另一个表...

    hibernate 多表关联 中间表

    在处理多表关联时,Hibernate提供了一种高效且灵活的方法,尤其是当涉及到中间表的情况。中间表通常用于实现多对多(Many-to-Many)的关系,比如在一个用户和角色的关系中,一个用户可以有多个角色,一个角色也可以...

    hibernate关联映射详解

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

    Hibernate基于连接表的一对多单向关联

    标题 "Hibernate基于连接表的一对多单向关联" 涉及的是数据库对象关系映射(ORM)框架Hibernate中的一个重要概念。在Java开发中,Hibernate是广泛使用的工具,它允许开发者将Java类与数据库表进行映射,简化了数据...

    Hibernate 关联关系解除

    一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    hibernate 关联表问题

    NULL 博文链接:https://lf6627926.iteye.com/blog/1176785

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...

    Hibernate多表关联配置及错误解决方法

    在处理多表关联时,Hibernate提供了多种关联类型,包括一对一(OneToOne),多对一(ManyToOne),一对多(OneToMany)和多对多(ManyToMany)。本文将详细介绍这些关联配置以及如何解决可能出现的错误。 **一对一关联...

    Hibernate实体关联速查表

    级联操作允许在操作一个实体时自动处理与之关联的其他实体。常见的级联类型包括:`ALL`(所有操作都级联)、`PERSIST`(保存)、`MERGE`(合并)、`REMOVE`(删除)、`REFRESH`(刷新)、`DETACH`(分离)等。 **六...

    hibernate表关联实例

    本教程将深入探讨Hibernate中的表关联实例,帮助初学者理解如何在实际项目中实现不同表之间的关联。 一、一对一关联(One-to-One) 在数据库中,一对一关联意味着一个实体对应另一个实体的唯一实例。在Hibernate中...

    Hibernate 多表连接分页查询示范项目

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

    hibernate多对多关联映射

    总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...

    Hibernate ORM - 多对多双向连接表关联关系

    本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...

    hibernate使用主键关联的一对一关系

    在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...

    hibernate关联映射实例

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

    hibernate关联查询 实例源码

    hibernate关联查询 实例源码 java web 如果不明白hibernate关联查询不明白的可以看看,保证马上学会,注释,数据库都有,很简单易学的源码,谢谢下载!

    hibernate的表关联操作-hibernate02

    本篇主要围绕"hibernate的表关联操作"展开,通过映射关系来实现对实体类的增删改查,帮助我们深入理解Hibernate的核心机制。 首先,我们要明白什么是表关联。在数据库设计中,关联是表与表之间的连接,通常由外键...

    Hibernate关联映射

    例如,在 Person 类中,有一个 Address 的属性,通过外键 `addressId` 与 Address 表关联,并设置 `unique="true"`,使得 Address 对象只能有一个 Person 对象与之关联。 2. Hibernate 一对一主键单向关联: 一对...

Global site tag (gtag.js) - Google Analytics