这个例子好像是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
分享到:
相关推荐
在理解Hibernate HQL关联查询之前,我们需要先回顾一下数据库表连接的基本概念及其分类。数据库表连接主要分为以下几种: 1. **内连接(Inner Join)**:只返回两个表中满足连接条件的记录。如果某条记录在另一个表...
在处理多表关联时,Hibernate提供了一种高效且灵活的方法,尤其是当涉及到中间表的情况。中间表通常用于实现多对多(Many-to-Many)的关系,比如在一个用户和角色的关系中,一个用户可以有多个角色,一个角色也可以...
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的...
标题 "Hibernate基于连接表的一对多单向关联" 涉及的是数据库对象关系映射(ORM)框架Hibernate中的一个重要概念。在Java开发中,Hibernate是广泛使用的工具,它允许开发者将Java类与数据库表进行映射,简化了数据...
一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...
根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...
NULL 博文链接:https://lf6627926.iteye.com/blog/1176785
### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。Hibernate作为一款流行的Java持久层框架,提供了一种非常便捷的方式来处理...
在处理多表关联时,Hibernate提供了多种关联类型,包括一对一(OneToOne),多对一(ManyToOne),一对多(OneToMany)和多对多(ManyToMany)。本文将详细介绍这些关联配置以及如何解决可能出现的错误。 **一对一关联...
级联操作允许在操作一个实体时自动处理与之关联的其他实体。常见的级联类型包括:`ALL`(所有操作都级联)、`PERSIST`(保存)、`MERGE`(合并)、`REMOVE`(删除)、`REFRESH`(刷新)、`DETACH`(分离)等。 **六...
本教程将深入探讨Hibernate中的表关联实例,帮助初学者理解如何在实际项目中实现不同表之间的关联。 一、一对一关联(One-to-One) 在数据库中,一对一关联意味着一个实体对应另一个实体的唯一实例。在Hibernate中...
总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...
总之,Hibernate的多对多关联映射是解决复杂关系数据库设计的关键技术之一。通过合理的配置和使用,开发者可以轻松管理实体之间的多对多关系,提高开发效率。理解并熟练掌握这部分知识对于提升Java企业级应用开发...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
在Java的持久化框架Hibernate中,一对一(OneToOne)关系是一种常见的对象关系映射(ORM)配置,用于表示两个实体类之间的一种唯一关联。在这个场景中,“hibernate使用主键关联的一对一关系”指的是通过共享主键来...
本文将深入探讨“hibernate关联映射实例”中的关键知识点,包括一对多、多对多和继承映射,这些都是Hibernate中至关重要的概念。 1. **一对多关联映射**: 在现实世界中,一个实体可能会与多个其他实体相关联,...
hibernate关联查询 实例源码 java web 如果不明白hibernate关联查询不明白的可以看看,保证马上学会,注释,数据库都有,很简单易学的源码,谢谢下载!
本篇主要围绕"hibernate的表关联操作"展开,通过映射关系来实现对实体类的增删改查,帮助我们深入理解Hibernate的核心机制。 首先,我们要明白什么是表关联。在数据库设计中,关联是表与表之间的连接,通常由外键...
例如,在 Person 类中,有一个 Address 的属性,通过外键 `addressId` 与 Address 表关联,并设置 `unique="true"`,使得 Address 对象只能有一个 Person 对象与之关联。 2. Hibernate 一对一主键单向关联: 一对...