关联关系映射文档格式.docx

上传人:b****4 文档编号:17637447 上传时间:2022-12-07 格式:DOCX 页数:15 大小:52.29KB
下载 相关 举报
关联关系映射文档格式.docx_第1页
第1页 / 共15页
关联关系映射文档格式.docx_第2页
第2页 / 共15页
关联关系映射文档格式.docx_第3页
第3页 / 共15页
关联关系映射文档格式.docx_第4页
第4页 / 共15页
关联关系映射文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

关联关系映射文档格式.docx

《关联关系映射文档格式.docx》由会员分享,可在线阅读,更多相关《关联关系映射文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

关联关系映射文档格式.docx

单向关联指具有关联关系的实体对象之间的加载关系是单向的。

它意味着,在具有关联关系的两个实体对象中,只有一个实体对象可以访问对方。

如图15.1所示,从学生对象中可以加载到班级信息,反过来则不行。

(2)双向关联

双向关联指具有关联关系的实体对象之间的加载关系是双向的。

它意味着,在具有关联关系的两个实体对象中,彼此都可以访问对方。

如图15.2所示,从学生对象中可以加载到班级信息,从班级对象中也可加载到学生的信息。

图15.1 

单向关联 

 

图15.2 

双向关联

15.1.2 

多对一单向关联映射

多对一单向关联映射十分常见,在学习其映射方法之前,首先来了解一下多对一单向关联的实体。

如图15.3所示,图书对象(Book)与图书类别对象(Category)为多对一的关联关系,多本图书对应一个类别,在Book对象中拥有Category的引用,它可以加载到一本图书的所属类别,而在Category的一端却不能加载到图书信息。

对于多对一单向关联映射,Hibernate会在多的一端加入外键与一的一端建立关联关系,其映射后的数据表如图15.4所示。

图15.3 

多对一单向关联的实体对象

图15.4 

映射后的数据表

例15.01 

建立图书对象(Book)与图书类别对象(Category)的多对一关联关系,通过单向关联进行映射。

其关键的映射代码如下:

(实例位置:

光盘\TM\Instances\15.01)

<

?

xmlversion="

1.0"

>

!

DOCTYPEhibernate-mappingPUBLIC

"

-//Hibernate/HibernateMappingDTD3.0//EN"

hibernate-mappingpackage="

com.lyq.model"

classname="

Book"

table="

tb_book_manytoone1"

<

--主键-->

idname="

id"

generatorclass="

native"

/>

/id>

--图书名称-->

propertyname="

name"

not-null="

true"

length="

200"

/>

--作者-->

author"

50"

--多对一关联映射-->

many-to-onename="

category"

class="

Category"

--映射的字段-->

columnname="

categoryId"

/many-to-one>

/class>

/hibernate-mapping>

Hibernate的多对一单向关联是使用<

many-to-one>

标签进行映射,此标签用在多的一端。

其中,name属性用于指定持久化类中相对应的属性名,class属性指定与其关联的对象。

此外还需要指定数据表中所映射的字段,它使用子标签<

column>

进行设置,<

标签的name属性用于一的一端的主键标识。

创建ExportTables类,在main()方法中将数据表导出。

其关键代码如下:

publicstaticvoidmain(String[]args){

//加载配置信息

Configurationcfg=newConfiguration().configure();

//实例化SchemaExport对象

SchemaExportexport=newSchemaExport(cfg);

//导出数据表

export.create(true,true);

}

运行此类,将在数据库中创建图书信息表与图书类别表。

例15.02 

多对一单向关联映射中对象的加载,代码如下。

光盘\TM\Instances\15.02)

publicclassTest{

Sessionsession=null;

//声明Session对象

try{

//获取Session

session=HibernateUtil.getSession();

//开启事务

session.beginTransaction();

//查询图书对象

Bookbook=(Book)session.get(Book.class,newInteger

(1));

System.out.println("

图书名称:

+book.getName());

图书类别:

+book.getCategory().getName());

//提交事务

session.getTransaction().commit();

}catch(Exceptione){

e.printStackTrace();

//出错将回滚事务

session.getTransaction().rollback();

}finally{

//关闭Session对象

HibernateUtil.closeSession(session);

}

本实例中,Book对象持有Category对象的引用,从Book对象中可以得到Category对象的属性,实例运行结果如图15.5所示。

图15.5 

实例运行结果

15.1.3 

多对一双向关联映射

双向关联的实体对象都持有对方的引用,在任何一端都能加载到对方的信息。

多对一双向关联映射实质是在多对一单向关联的基础上,加入了一对多关联关系。

下面仍以图书对象(Book)与图书类别对象(Category)为例,讲解多对一双向关联映射,其实体关系如图15.6所示。

图15.6 

多对一双向关联的实体对象

对于图书类别对象Category,它拥有多个图书对

象的引用,因此需要在Category对象中加入Set属性的图书集合books,对于其映射文件也通过集合的方式进行映射。

例15.03 

建立图书对象(Book)与图书类别对象(Category)的多对一关联关系,通过双向关联进行映射,其中Book对象的映射文件与多对一单向关联中一致,并没有发生任何变化,而Category对象的映射文件通过<

set>

标签进行映射。

代码如下:

光盘\TM\Instances\15.03)

tb_Category_manytoone2"

--类别名称-->

--一对多映射-->

setname="

books"

keycolumn="

one-to-manyclass="

/set>

标签用于映射集合类型的属性,其中name属性用于指定持久化类中的属性名称。

此标签通过子标签<

key>

指定数据表中的关联字段,对于一对多关联映射通过<

one-to-many>

标签进行映射,其class属性用于指定相关联的对象。

例15.04 

多对一双向关联映射中对象的加载,代码如下:

光盘\TM\Instances\15.04)

*********查询图书对象************"

);

Bookbook1=(Book)session.get(Book.class,newInteger

(1));

+book1.getName());

+book1.getCategory().getName());

*********查询类别对象************"

//查询类别对象

Categoryc=(Category)session.load(Category.class,newInteger

(1));

类别名称:

+c.getName());

Set<

Book>

books=c.getBooks();

//获取类别中的所有图书

//通过迭代输出图书名称

for(Iterator<

it=books.iterator();

it.hasNext();

){

Bookbook2=(Book)it.next();

+book2.getName());

由于配置了图书与类别之间的多对一双向关联映射,所以Book对象与Category对象都持有对方的引用。

图书类别属于多对一中一的一端,在一个类别中拥有多本图书,Hibernate使用Set集合进行映射,因此当加载一个类别时,可以加载到类别中的所有图书。

实例运行结果如图15.7所示。

图15.7 

15.1.4 

一对一主键关联映射

用户与身份证之间是一对一的关联关系,每一个用户对应一个身份证,同样每一个身份证也对应一个用户。

在Hibernate中,可将一对一关联映射分为主键关联映射与外键关联映射。

使用一对一主键关联映射时,其数据表的结构如图15.8所示。

从图15.8可以看出,IdCard的主键参照了User的外键,它与User对象的主键是一一对应的关系。

同样,Hibernate的一对一主键关联映射也分为单向与双向映射。

下面以双向映射为例进行讲解,其实体间的关系如图15.9所示。

图15.8 

表关系 

图15.9 

实体关系

例15.05 

用户(User)对象与证件(IdCard)对象为一对一的关联关系,二者之间通过一对一主键关联映射。

其中User的映射文件User.hbm.xml的关键代码如下:

光盘\TM\Instances\15.05)

hibernate-mapping>

com.lyq.model.User"

tb_user_onetoone_p"

--主键id-->

--姓名-->

username"

--年龄-->

age"

--一对一映射-->

one-to-onename="

idCard"

IdCard对象的主键参照了User对象的外键,其映射文件IdCard.hbm.xml的关键代码如下。

com.lyq.model.IdCard"

tb_idCard_onetoone_p"

--参考User的外键-->

foreign"

paramname="

property"

user<

/param>

/generator>

--证件号-->

num"

user"

constrained="

one-to-one>

标签用于建立一对一关联映射,其中name属性用于指定持久化类中的属性名称;

constrained属性用于建立一个约束,它表明IdCard对象的主键参照了User 

的外键。

IdCard的主键生成策略为foreign,此种方式通过<

parm>

标签配置主键的来源。

运行此类,将在数据库中创建用户表与证件表。

15.1.5 

一对一外键关联映射

除一对一主键关联映射外,还有一对一外键关联映射。

这种映射方式在其中一端加入一个外键指向另一端,其映射后形成的数据表如图15.10所示。

图15.10 

表关系

从图15.10中可以看出,这种映射方式与多对一映射方式相似,如果能限制User对象中IdCard的唯一性,那么二者之间实质上就构成了一对一关联关系。

例15.06 

用户(User)对象与证件(IdCard)对象为一对一的关联关系,在二者之间建立一对一外键关联映射。

其中IdCard的映射文件IdCard.hbm.xml的关键代码如下:

光盘\TM\Instances\15.06)

tb_idCard_onetoone_f"

User对象的映射文件User.hbm.xml的关键代码如下:

tb_user_onetoone_f"

unique="

在IdCard对象的映射文件中,并没有发生太大的变化,它只不过进行了普

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1