- 浏览: 184503 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xoxoj:
如果发现input输入框里包含这些全角的内容,jquery应该 ...
全角正则 -
TJYCHYANGCHENHUI:
不对吧!你的第一句话说错了好吧,在没有开启事务的情况下,sa ...
hibernate入门(三)Session中的主要方法 -
leonardleonard:
好帖
js公共函数(utils.js) -
xyqqjy:
朋友你和我的现状很像啊!
我离职快一年了,一直没有再做开发这一 ...
浮躁,我 -
djy1135:
确实需要静一下心! 一样一样来吧。 东西学不半扔了,跟没学差 ...
浮躁,我
1 .多对一关系映射 :
一个部门有可以有多个员工,而一个员工只属于一个部门。从员工角度看,很多员工会隶属一个部门。 现以实例说明,实例概要:一个部门类,只有id 和部门名称两个属性。有一个员工类,有id 和员工名称及部门对象三个属性。操作步骤如下:
>> 步骤一,建立Depatment.java 及实体配置文件:
package com.asm.hibernate.domain;
public class Department {
private int id ;
private String name ;
public int getId() {
return id ;
}
public void setId( int id) {
this . id = id;
}
public String getName() {
return name ;
}
public void setName(String name) {
this . name = name;
}
}
---- 同包下的实体配置文件:Depart.hbm.xml
<? xml version = "1.0" ?>
<! DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping package = "com.asm.hibernate.domain" >
< class name = "Department" >
< id name = "id" >
< generator class = "native" />
</ id >
< property name = "name" ></ property >
</ class >
</ hibernate-mapping >
以上的操作,没的什么可多言的,和前面的配置是一样的形式。
>> 步骤二, Employee.java 内容如下及实体配置文件
package com.asm.hibernate.domain;
public class Employee {
private int id ;
private String name ;
private Department depart ;
public int getId() {
return id ;
}
public void setId( int id) {
this . id = id;
}
public String getName() {
return name ;
}
public void setName(String name) {
this . name = name;
}
public Department getDepart() {
return depart ;
}
public void setDepart(Department depart) {
this . depart = depart;
}
}
---- 同包下的实体配置文件:Employee.hbm.xml
<? xml version = "1.0" ?>
<! DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
< hibernate-mapping package = "com.asm.hibernate.domain" >
< class name = "Employee" >
< id name = "id" >
< generator class = "native" />
</ id >
< property name = "name" ></ property >
< many-to-one name = "depart" column = "depart_id" />
</ class >
</
hibernate-mapping
>
先来说这个类文件
,它的一个重要属性就是
Department
对象,这就是它所关联的一个外键,这里我们只必须记住一点,每个实体类对应于一张表,如果一张表想关联另一张表,则只需要在这张表所对应的实体类中引入它想关联表的实体类对象。再进行简单的配置即可。再来看配置文件,这里主要看这个
<
many-to-one
name
=
"depart"
column
=
"depart_id"
></
many-to-one
>
元素,它的name
属性仍然是实体类中的属性。column
为对应表的外键。可以留意下数据库表中的相关表。
>> 修改主配置文件,增加以下内容以便找到相应的实体配置文件。
< mapping resource = "com/dep/emp/Employee.hbm.xml" />
< mapping resource = "com/dep/emp/Depart.hbm.xml" />
>> 步骤四,编写测试类。类中省略导入包的内容。
package com.asm.hibernate.test;
public class ManyToOneTest {
public static void main(String[] args) {
add ();
}
static void add() {
Session s = null ;
Transaction tx = null ;
try {
Department depart = new Department();
depart.setName( "departName" );
Employee emp = new Employee();
emp.setName( "empName" );
emp.setDepart(depart);
s = HibernateUtil.getSession ();
tx = s.beginTransaction();
s.save(depart);
s.save(emp);
// 交换以上两句的位置,看Hibernate 执行的sql 语句。会再增加一条更新操作。
tx.commit();
} finally {
if (s != null )
s.close();
}
}
}
说明:以前插入新的记录,都要传递一个实体对象,而这里没有这么做,原因是为了体现出一个插入记录的顺序问题,仔细观察add() 方法,发现先保存的是Department 对象,再保存的是Employee 对象,原因是什么?这里略作说明,我们知道此项目设计的是让Employee 表来关联Department 表,而要想关联此表,必须保证此表已进行存储,这里暂时这样理解,也可以试试颠倒save 方法的顺序,或是不保存depart 来看看效果,这样也许有助理解。
简要说明,以上提到的尝试性操作:颠倒顺序,可以通过,只是增加了一条更新操作;不保存dep 则不能通过,原因是此实体对象没有保存;再测试,如果注释掉“ depart.setDname( "deptName" ); ”后面按正常顺序执行,发现是能正确执行的。只是在数据库的employee 表中depart_id 字段为null ,如果我们在前面设置 < many-to-one name = "depart" column = "depart_id" > 中增加:not-null = "true" 这个属性,再来执行将会报“不能为空的错误”。通过增加这个属性,可以让我们更好理解如何建立两个对象的关联。
>> 步骤五,再探查询方法。接上面,在测试类中增加一个查询方法,内容如下:
static Employee query( int empId) {
Session s = null ;
try {
s = HibernateUtil.getSession ();
Employee emp = (Employee) s.get (Employee. class , empId);
System. out .println( "Department Name:" + emp.getDepart().getName());
return emp;
} finally {
if (s != null )
s.close ();
}
}
随后再在主方法中增加如下内容:便可以测试结果:
query (1);
对结果的说明分析 :如果在以往的JDBC 操作中,我们想得到这个部门的信息,需要查两次才能得到,这里的 Hibernate 就实现了这一优化,如果我们开启了控制台的 数据库显示 功能(主配置文件中开启,前面已提到),便可以查看下数据库的执行操作,并切实感受到这里实际执行了两步查询操作,在以后的操作中,建议开启此属性,以便切实体会数据库操作。
>> 步骤六,增加一个新的查询方法query2 ,内容如下,注意和query 区别:
static Employee query2( int empId) {
Session s = null ;
try {
s = HibernateUtil.getSession ();
Employee emp = (Employee) s.get(Employee. class , empId);
Hibernate .initialize (emp.getDepart());
// 上一句作用后面会作说明,这里略作了解
return emp;
} finally {
if (s != null )
s.close();
}
}
在main 方法中增加如下内容进行测试:
Employee emp = query2 (1);
System. out .println(emp.getDepart().getName());
发表评论
-
hibernate入门(十二)一些细节问题分析
2010-07-29 11:17 7671. 实体配置文件中的类型问题 : 在前 ... -
hibernate入门(十一)事务
2010-07-29 11:16 9661.事务引发的三层架构MVC讨论: 在前面的程序代码中多次用 ... -
hibernate入门(十)缓存
2010-07-29 11:11 7121. 模拟缓存并简要说明缓存实现原理 在myhib ... -
hibernate入门(九)关联关系中的高级应用_概述关联关系中的懒加载
2010-07-29 11:09 8325. 概述关联关系中的懒加载: (1) 一对 ... -
hibernate入门(九)关联关系中的高级应用_懒加载
2010-07-29 11:07 7534. 懒加载: 在前面我们已经对懒加载有所提及,现 ... -
hibernate入门(九)关联关系中的高级应用_继承关系
2010-07-29 10:59 9593. 继承关系 : 在前面的部门员工实例 ... -
hibernate入门(九)关联关系中的高级应用_inverse属性
2010-07-29 10:43 851inverse 的作用:询问是否放弃维护关系,默认是fals ... -
hibernate入门(九)关联关系中的高级应用_级联操作
2010-07-29 10:40 8581. 级联操作 : ... -
hibernate入门(八)其它集合类型
2010-07-29 10:38 825说明:在前面我们已经使用过set 集合类型,其实除了set ... -
hibernate入门(七)关联关系讨论_组件关系映射
2010-07-29 10:36 776典型实例:每个人有不同的名字,或者多个人可以是同一个名字,对于 ... -
hibernate入门(七)关联关系讨论_多对多关系映射
2010-07-29 10:31 838典型实例:一个学生可以有多个老师,同样一个老师可以有多个学生, ... -
hibernate入门(七)关联关系讨论_一对一关系映射
2010-07-29 10:27 912典型的实例:一个人有一个身份证,而一个身份证只属于某一个人。以 ... -
hibernate入门(七)关联关系讨论_一对多关系映射
2010-07-29 10:25 6952 .一对多关系映射: 上面提到的多个员工对应 ... -
hibernate入门(六)基本应用实例:Dao设计
2010-07-29 10:20 10031 .总体设计:设计User 对象及相关实体配置文件,工具 ... -
hibernate入门(五)完善工具类及HQL QBC初步相关
2010-07-29 10:17 10721 .无聊的讨论 : 在前面我们写了一个 ... -
hibernate入门(四)对象三种状态
2010-07-29 10:12 8601 .瞬时(transient ) ... -
hibernate入门(三)Session中的主要方法
2010-07-29 10:09 10851 .保存数据:save ,presist 说明 ... -
hibernate入门(二)优化代码
2010-07-29 10:07 7701 .为会么要优化 ... -
hibernate入门(一)第一个应用实例
2010-07-29 10:03 856一 、第一个应用实例 ...
相关推荐
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
本文将深入探讨 Hibernate 中的一对一映射关系,并以"hibernate 映射关系学习入门 一对一映射Eclipse源码"为主题,详细解析其概念、配置以及实际应用。 一对一映射是Hibernate中的一种关联关系,它表示两个实体之间...
在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...
`hibernate_one_to_one`标签表示我们将探讨的是如何在Hibernate中实现一对一的映射关系。 **二、一对一映射的两种类型** 1. **主键关联(Primary Key Join)**:两个实体共享同一个主键,这通常意味着它们是同一个...
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|... 20_一对一外键关联关系的映射与原理分析
本教程将详细介绍如何使用`@Entity`、`@Table`、`@Id`等注解,以及如何进行一对一、一对多、多对多等关联映射。 9. **查询语言(HQL)与 Criteria API** Hibernate提供了自己的查询语言HQL(Hibernate Query ...
Hibernate从入门到精通(六)一对一双向关联映射 - 赵帅 廊坊师范学院信息技术提高班
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多
**第一部分:Hibernate入门** 这部分主要介绍了Hibernate的基本概念和安装配置。Hibernate基于Java Persistence API(JPA),它提供了对象关系映射(ORM)功能,将Java类映射到数据库表。首先,你需要下载Hibernate...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
1. 多对一(Many-to-One)关联映射: 在多对一的关系中,一个实体(如`Group`)可以对应多个实体(如`User`)。在数据库中,这通常表现为在`User`表中有一个`groupId`字段指向`Group`表的主键。在Hibernate映射文件...
10. **关联映射**:一對一、一对多、多对一、多对多的关系映射实现,包括@OneToOne、@OneToMany、@ManyToOne、@ManyToMany等。 11. **缓存机制**:理解Hibernate的第一级缓存(Session级别)和第二级缓存...
Hibernate支持一对一、一对多、多对一、多对多等各种关系映射,通过注解或XML配置文件定义。例如,一个用户可以有多个订单,订单也可以属于一个用户: ```java @Entity @Table(name = "Order") public class Order ...
本实例将聚焦于Hibernate中的一对多关系,这是一种常见的关联类型,尤其是在处理具有层次结构的数据时。双向一对多关系意味着一个实体可以拥有多个相关联的实体,同时每个相关联的实体也可以回指到原始实体。 **...
15. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等,理解这些关系并正确配置是使用Hibernate的关键。 通过这个"hibernate_first"实例,你可以...
- **关联关系**:关联关系是对象之间的一种联系,比如一个班级可以有多个学生,这种关系在ORM中可以通过一对一、一对多、多对一、多对多等方式实现。 - **依赖关系**:对象之间的短暂交互,如函数调用,不涉及长期...
《Hibernate 3.2.0 参考指南中文版》是一部深入浅出的Java持久化框架Hibernate的教学资源,尤其适合初学者入门。本教程详细介绍了Hibernate的核心概念、配置、对象关系映射(ORM)以及实际开发中的应用。下面将对...