- 浏览: 186051 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xoxoj:
如果发现input输入框里包含这些全角的内容,jquery应该 ...
全角正则 -
TJYCHYANGCHENHUI:
不对吧!你的第一句话说错了好吧,在没有开启事务的情况下,sa ...
hibernate入门(三)Session中的主要方法 -
leonardleonard:
好帖
js公共函数(utils.js) -
xyqqjy:
朋友你和我的现状很像啊!
我离职快一年了,一直没有再做开发这一 ...
浮躁,我 -
djy1135:
确实需要静一下心! 一样一样来吧。 东西学不半扔了,跟没学差 ...
浮躁,我
典型实例:一个学生可以有多个老师,同样一个老师可以有多个学生,对此设计如下:
学生studnet 表:
column |
id |
name |
teachers |
老师teacher 表:
column |
id |
name |
studnets |
在利用学生查到他所有的老师,我们一般会设计中间表,来查找,中间表用来把学生和老师关联,通过此表进行学生和老师之间的交互查找。
中间表teacher_student:
column |
teacher_id |
studnet_id |
|
复合主键 |
在数据库操作中,作以下说明:如果通过老师查找学生,过程:先通过teacher 表查找到id ,再到teacher_student 表中以teacher.id==teacher_student.teacher_id 为查询条件来查找studnent_id , 查找到studnet_id 后,再以teacher_student.stucent_id==student.id 为查询条件来查找所有学生的信息。 同样通过学生查老师,也是类似的过程。
>> 步骤一 、创建实体类Student 、Teacher
Student 类内容如下:省略getXXX() 、setXXX() 方法。
package com.asm.hibernate.domain;
import java.util.Set;
public class Student {
private int id ;
private String name ;
private Set<Teacher> teachers ;
}
Teacher 类内容如下:省略getXXX() 、setXXX() 方法。
package com.asm.hibernate.domain;
import java.util.Set;
public class Teacher {
private int id ;
private String name ;
private Set<Student> students ;
}
>> 步骤二 、为两个实体创建配置文件(省略了前面的xml 文档声明内容):
Student.hbm.xml 内容如下:
< hibernate-mapping
package = "com.asm.hibernate.domain" >
< class name = "Student" >
< id name = "id" >
< generator class = "native" />
</ id >
< property name = "name" ></ property >
< set name = "teachers" table = "teacher_student" >
< key column = "student_id" />
< many-to-many class = "Student" column = "teacher_id" />
</ set >
</ class >
</ hibernate-mapping >
说明: 这里重点说明最后的<set> 配置:(1 )Student 中Set 类型的属性配置一个<set> 元素,其实在前面的一对多中已经出现了<set> 元素的配置,我们可以这样认为“凡是要为某个Set 类型的属性进行映射配置,都可以用<set> 元素来配置”。 <set> 中的table 属性为关联表的名称。 (2 )它的子元素<key> 中的column 为关联表中以该映射文件所映射的表的主键为外键的字段名称. (3 )<many-to-many> coumn 属性为关联表中以欲关联类对应表的主键为外键的字段名称。
Teacher.hbm.xml 内容如下:
< hibernate-mapping
package = "com.asm.hibernate.domain" >
< class name = "Teacher" >
< id name = "id" >
< generator class = "native" />
</ id >
< property name = "name" ></ property >
< set name = "students" table = "teacher_student" >
< key column = "teacher_id" />
< many-to-many class = "Student" column = "student_id" />
</ set >
</ class >
</ hibernate-mapping >
由于和Student.hbm.xml 是类似的,这里不作说明,这样也就建立起了双向的多对多关联。
要注意他们所依赖的中间表为teacher_student ,所以这里的<set> 元素中的table 属性和teacher 映射文件相同,而特别要注意<key> 和<many-to-many> 中column 中属性值的设定。
>> 步骤三 、在主配置文件中关联实体配置文件:只需要增加如下内容:
< mapping resource = "com/asm/hibernate/domain/Teacher.hbm.xml" />
< mapping resource = "com/asm/hibernate/domain/Student.hbm.xml" />
>> 步骤四 、编写测试文件ManyToManyTest.java :省略导入的包。
package com.asm.hibernate.test;
public class ManyToManyTest {
public static void main(String[] args) {
add ();
}
static void add() {
Session s = null ;
Transaction tr = null ;
try {
s = HibernateUtil.getSession ();
tr = s.beginTransaction();
Teacher t1 = new Teacher();
t1.setName( "t1Name" );
Teacher t2 = new Teacher();
t2.setName( "t2Name" );
Student s1 = new Student();
s1.setName( "s1Name" );
Student s2 = new Student();
s2.setName( "s2Name" );
// 再增加如下内容进行测试:
Set<Teacher> ts = new HashSet<Teacher>();
ts.add(t1);
ts.add(t2);
Set<Student> ss = new HashSet<Student>();
ss.add(s1);
ss.add(s2);
t1.setStudents(ss);
t2.setStudents(ss);
// s1.setTeachers(ts);
// s2.setTeachers(ts);
// 增加内容完
s.save(s1);
s.save(s2);
s.save(t1);
s.save(t2);
tr.commit();
} finally {
if (s != null )
s.close();
}
}
}
说明:注意以上注释掉的内容,如果去掉会出现异常。理解:加上增加的内容后再执行发现,在开启“数据库显示”功能后,发现控制台中新增加了四条插入语句,且是插入到中间表teacher_student 中,在此处相当于告诉了每个学生所关联到的老师,而如果在mysql 客户端执行“show create table teacher_student ”, 观察它的表结构并结合“去掉注释的报错说明”,就容易理解到为什么不能有注释掉的内容。 另需要说明的是“多对多”在操作和性能方面都不太理想,所以它使用较少,一般我们会选择转换成“一对多”的模型,而Hiberante 的“多对多”实现,可能也是转换成两个“一对多”来实现。
发表评论
-
hibernate入门(十二)一些细节问题分析
2010-07-29 11:17 7791. 实体配置文件中的类型问题 : 在前 ... -
hibernate入门(十一)事务
2010-07-29 11:16 9761.事务引发的三层架构MVC讨论: 在前面的程序代码中多次用 ... -
hibernate入门(十)缓存
2010-07-29 11:11 7181. 模拟缓存并简要说明缓存实现原理 在myhib ... -
hibernate入门(九)关联关系中的高级应用_概述关联关系中的懒加载
2010-07-29 11:09 8365. 概述关联关系中的懒加载: (1) 一对 ... -
hibernate入门(九)关联关系中的高级应用_懒加载
2010-07-29 11:07 7594. 懒加载: 在前面我们已经对懒加载有所提及,现 ... -
hibernate入门(九)关联关系中的高级应用_继承关系
2010-07-29 10:59 9653. 继承关系 : 在前面的部门员工实例 ... -
hibernate入门(九)关联关系中的高级应用_inverse属性
2010-07-29 10:43 855inverse 的作用:询问是否放弃维护关系,默认是fals ... -
hibernate入门(九)关联关系中的高级应用_级联操作
2010-07-29 10:40 8651. 级联操作 : ... -
hibernate入门(八)其它集合类型
2010-07-29 10:38 829说明:在前面我们已经使用过set 集合类型,其实除了set ... -
hibernate入门(七)关联关系讨论_组件关系映射
2010-07-29 10:36 785典型实例:每个人有不同的名字,或者多个人可以是同一个名字,对于 ... -
hibernate入门(七)关联关系讨论_一对一关系映射
2010-07-29 10:27 914典型的实例:一个人有一个身份证,而一个身份证只属于某一个人。以 ... -
hibernate入门(七)关联关系讨论_一对多关系映射
2010-07-29 10:25 6972 .一对多关系映射: 上面提到的多个员工对应 ... -
hibernate入门(七)关联关系讨论_多对一关系映射
2010-07-29 10:22 8551 .多对一关系映射 : 一个部门有可以有多 ... -
hibernate入门(六)基本应用实例:Dao设计
2010-07-29 10:20 10061 .总体设计:设计User 对象及相关实体配置文件,工具 ... -
hibernate入门(五)完善工具类及HQL QBC初步相关
2010-07-29 10:17 10751 .无聊的讨论 : 在前面我们写了一个 ... -
hibernate入门(四)对象三种状态
2010-07-29 10:12 8661 .瞬时(transient ) ... -
hibernate入门(三)Session中的主要方法
2010-07-29 10:09 10921 .保存数据:save ,presist 说明 ... -
hibernate入门(二)优化代码
2010-07-29 10:07 7911 .为会么要优化 ... -
hibernate入门(一)第一个应用实例
2010-07-29 10:03 879一 、第一个应用实例 ...
相关推荐
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
本文将深入探讨 Hibernate 中的一对一映射关系,并以"hibernate 映射关系学习入门 一对一映射Eclipse源码"为主题,详细解析其概念、配置以及实际应用。 一对一映射是Hibernate中的一种关联关系,它表示两个实体之间...
在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...
`hibernate_one_to_one`标签表示我们将探讨的是如何在Hibernate中实现一对一的映射关系。 **二、一对一映射的两种类型** 1. **主键关联(Primary Key Join)**:两个实体共享同一个主键,这通常意味着它们是同一个...
14_多对一关联关系的映射与原理分析 15_多对一关联关系的检索与原理分析 16_保存多对一关联关系的更进一步分析 17_一对多关联关系的映射与原理分析 18_一对一主键关联关系的映射与原理分析 19_一对一主键关联...
本教程将详细介绍如何使用`@Entity`、`@Table`、`@Id`等注解,以及如何进行一对一、一对多、多对多等关联映射。 9. **查询语言(HQL)与 Criteria API** Hibernate提供了自己的查询语言HQL(Hibernate Query ...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
10. **关联映射**:一對一、一对多、多对一、多对多的关系映射实现,包括@OneToOne、@OneToMany、@ManyToOne、@ManyToMany等。 11. **缓存机制**:理解Hibernate的第一级缓存(Session级别)和第二级缓存...
《Hibernate入门到精通》 Hibernate 是一款强大的Java持久层框架,它简化了数据库与Java对象之间的交互,使得开发者能够更加专注于业务逻辑的实现。本文将深入探讨Hibernate的基础知识,包括各种关联映射、继承映射...
### Hibernate入门知识点详解 #### 一、环境搭建与配置 - **工程创建**:首先,创建一个名为`HibernateDemo`的Java工程,这是构建Hibernate应用的基础。为了使工程能够识别和运行Hibernate相关的代码,需要正确地...
15. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等,理解这些关系并正确配置是使用Hibernate的关键。 通过这个"hibernate_first"实例,你可以...
八、关联映射 1. 一对一(OneToOne):一个实体对象对应数据库中的一个记录。 2. 一对多(OneToMany):一个实体对象可以对应多个子对象,如学生与课程的关系。 3. 多对一(ManyToOne):多个实体对象对应一个父对象...
- **关联关系**:关联关系是对象之间的一种联系,比如一个班级可以有多个学生,这种关系在ORM中可以通过一对一、一对多、多对一、多对多等方式实现。 - **依赖关系**:对象之间的短暂交互,如函数调用,不涉及长期...
Hibernate从入门到精通(六)一对一双向关联映射 - 赵帅 廊坊师范学院信息技术提高班
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中操作数据库,而无需直接编写SQL语句。ORM框架如Hibernate简化了数据持久化的过程,通过将对象模型与数据库模型进行映射,实现了...
“Hibernate高级特性”章节则进一步探讨了XDoclet与Hibernate映射、数据检索(包括CriteriaQuery和HQL)、数据关联(如一对一、一对多、多对多关系处理)、数据访问(PO和VO的使用)、事务管理、锁机制、分页、缓存...