`
付绍高
  • 浏览: 36993 次
  • 性别: Icon_minigender_1
  • 来自: 江西临川
社区版块
存档分类
最新评论

关联映射

阅读更多

三:关联映射

类与类之间最普遍的关系就是关联关系,关联映射的本质:将关联关系映射到数据库,所谓的关联关系是对象模型在内存中的一个或多个引用。

  1)多对一单向关联关系

  例如,客户(Customer)和订单(Order)的关系,一个客户能发出多个订单,而一个订单只能属于一个客户。从OrderCustomer的关系是多对一关系,意味着每个Order对象都会引用一个Customer对象。

  那么在Orderxml中要加入

  <many-to-one

        name="customer"

        column="CUSTOMER_ID"

        class="mypack.Customer"

        not-null="true"

     />

Order.hbm.xml<many-to-one>元素建立了CustomerORDERS表的外键CUSTOMER_ID之间的映射。

 

它包括如下属性。

  name:设定待映射的持久化类的属性名,此处为Order类的customer属性。

column:设定和持久化类的属性对应的表的外键,此处为ORDERS表的外键CUSTOMER_ID

  class:设定持久化类的属性的类型,此处设定customer属性为Customer类。

  notnull:如果为ture,表示customer属性不能为null,默认为false

 

映射原理:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一

2)一对多的单向关联关系

  例如,客户(Customer)和订单(Order)的关系,一个客户能发出多个订单,而一个订单只能属于一个客户。从CustomerOrder的关系是一对多关系,意味着每个Customer对象都会引用一个集合属性存放Order对象。

  那么在Customerxml中要加入

  < set name=" orders" > 

  < key column = " CUSTOMER_ID " /> 

  < one-to-many class = "com.fendou.domain.Order " />        

  </ set > 

此时通过 < key column = " CUSTOMER_ID " /> 在多的一端(Order)添加了一个外键 CUSTOMER_ID 指向一的一端。在一的一端通过orders维护多的一端。

 

多对一及一对多关联映射的区别(单向): 

不管多对一还是一对多,都是在" " 的一端添加一个外键指向" " 的一端,只不过是多对一是在多的一端为其自己添外键,而一对多则是在一的一端为多的一端添加外主键。

 

 

 

3 一对一关联

例如,注册用户(User)和用户详细信息(Useronfo)的关系

A: 一对一以外键关联

  以外键关联的概念:两个实体各自有不同的主键,但是一个实体有一个外键引用另一个实体的主键。例如: user id pk,name,passeword    userinfo  id pk,uid fk,infor

User.hbm.xml

<one-to-one name="userinfo"   class="com.fendou.domain.Userinfo"  />

Useronfo.hbm.xml

<many-to-one name="user"  class="com.fendou.domain..User"  columnn="uid"   unique="true" />

唯一的多对一,其实就便成了一对一了

 

B: 一对一以以主键关联

   关联的两个实体共享一个主键例, UserUseronfo共享一个主键id,并且两个表是一对一关系,那么如何让一个表引用另一个表生成的主键?我们可以用hibernate的主键生成策略foreign机制生成

我们 Useronfo 主键是根据Use来生成的所以User可以不用修改,我们只需修改Useronfo.hbm.xml

 

<hibernate-mapping>

<id name="id"> 

<generator name="foreign">  

<param name="property">user</param>

</generator>

</id>

<one-to-one name=" user " constrained="true"></one-to-one>

Useronfoid主键上,使用foreign表示与外键共享主键,也就是与User实体共享主键,而constrained设定为true,表示约束Useronfo的主键必须与user中对应资料的主键相同。

4)多对多映射

 hibernate的多对多映射是通过一个中间表来实现的。中间表是纽带。多对多中。两个JAVA对象如何才能表示多对多?我们最容易想到的方式就是在各自的成员变量里面,都包含一个集合(Set),来包含N多个另外一个对象。

假设A,B两个类多对多:

A.hbm.xml中,有下面一项:

<set name="A中的Set<B>" table="A-B中间表名">

        <key column="外键A"/> 

         <many-to-many class="类名B"  column="外键B"/>

</set>

这里的"外键A"就是"中间表"中相对于AID,也就是说这个column是在"A-B中间表"中的某一个column ,对应的ID"A的表"中的ID

这里的"外键B",也是在 "A-B中间表"中的column,对应的ID就是"B的表"中的ID

 

一对一主键关联关系person—IdCard

主对象person 从对象idCard     idCard 的主键生成是foreign<generator class=”foreign”>

<param name=”property”>person</param></generator>  <one-to-one name=”person”></one-to-one>  personidCard的属性 名字不能乱给,另外如果没有主对象则就不能保存从对象

当查询主对象Person p=(Person) session.get(Person.class ,id)时并且查了两个对象只会出现一条语句,而查询从对象时

当查询两个对象时就会发出两条记录,当查询一个对象时只会发出一条语句来。

级联和关系维护

 

 

 

 

分享到:
评论

相关推荐

    hibernate关联映射详解

    包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。

    MyBatis关联映射代码

    "关联映射"是MyBatis中的一个重要概念,用于处理数据库中表之间的关联关系,比如一对一、一对多、多对一和多对多的关系。下面将详细介绍MyBatis的关联映射以及如何在代码中实现。 关联映射是MyBatis通过XML配置文件...

    hibernate多对多关联映射

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系数据库模型映射方式,用于处理两个实体之间存在多个实例互相关联的情况。本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关...

    hibernate关联映射实例

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

    关于关联映射的一个例子

    关联映射是数据库设计中的一个重要概念,特别是在关系型数据库中,它用于描述两个表之间的关系。在这个例子中,我们关注的是"teacher"表和"student"表之间的一对多关联映射。 首先,我们需要理解“一对多”关联的...

    MyBatis的关联映射实践报告

    了解数据表之间以及对象之间的三种关联关系 2.熟悉关联关系中的嵌套查询和 嵌套结果 3.掌握一对一,一对多,和多对多关联映射作用

    MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    在本篇关于MyBatis框架的学习中,我们将深入探讨一对一关联映射和一对多关联映射的概念、配置以及在实际开发中的应用。MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,从而...

    SpringBoot中mybatis表关联映射关系(一对多嵌套:结果方式)

    SpringBoot 中 MyBatis 表关联映射关系(一对多嵌套:结果方式) 在 SpringBoot 中,MyBatis 是一个非常流行的持久层框架,它提供了强大的持久化功能,能够将 Java 对象与数据库表进行映射。在实际开发中,我们经常...

    Hibernate一对一主键关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系数据库模型映射方式。这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射...

    MyBatis的一对一关联映射

    本篇文章将重点讲解如何在 MyBatis 中实现一对一的关联映射。 一对一关联映射是指两个实体类之间存在一对一的关系,即每个实体实例对应数据库中的一条记录,且这条记录在另一张表中也有唯一对应的记录。在 MyBatis ...

    hibernate一对多关联映射(双向关联)

    在Java的持久化框架Hibernate中,一对多关联映射是一种常见的关系映射方式,它用于表示一个实体(如用户)可以拥有多个子实体(如订单)的情况。在本篇文章中,我们将深入探讨如何实现双向关联的一对多映射,以及在...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    Hibernate一对一主键关联映射(单向关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理两个实体之间存在唯一对应关系时非常有用。本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个...

    hibernate关联映射的作用和常用属性解释

    ### Hibernate关联映射的作用与常用属性详解 #### 关联映射概述 在对象关系映射(Object Relational Mapping,简称ORM)技术中,Hibernate作为Java领域内非常成熟且功能强大的框架之一,它允许开发者将Java类映射...

    hibernate 双向多对多关联映射练习

    在Java的持久化框架Hibernate中,双向多对多关联映射是一种常见的数据关系模型,它允许两个实体类之间存在多个实例互相引用的情况。本练习旨在帮助开发者深入理解并熟练运用这种映射方式。通过以下详细讲解,我们将...

    基于java的企业级应用开发:MyBatis的关联映射.ppt

    关联映射是MyBatis中处理对象与对象间关联关系的关键特性,尤其在企业级应用开发中,面对复杂的数据库表关联,关联映射能有效地简化数据访问逻辑。 在关系型数据库中,常见的关联关系有三种:一对一(One-to-One)...

    hibernate一对一主键关联映射(双项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系映射方式,用于表示两个实体之间一对一的对应关系。本篇主要探讨的是基于主键(Primary Key)的双向关联映射,这在实际项目中非常常见...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    多对多的关联映射--基于SSH开发

    本主题聚焦于SSH框架中的“多对多”关联映射,这是一种数据库设计模式,允许一个实体与多个其他实体相互关联。下面将深入探讨这一关键概念及其在SSH框架下的实现。 首先,让我们理解“多对多”关联。在关系数据库中...

    hibernate基础 二 关联映射 级联操作

    ### Hibernate基础之关联映射与级联操作 #### 第一部分:主键生成策略与对象状态管理 ##### 主键生成策略 在使用Hibernate框架时,合理的主键生成策略能够极大地简化开发工作并提升应用性能。Hibernate提供了多种...

Global site tag (gtag.js) - Google Analytics