`

HIBERNATE 实体关联映射

阅读更多

实体关联映射:

1、一对一映射:
   主要有两种方式来映射:

一、基于外键的映射方式:

       首先有两张表,例如:user   和 card;card 表中参照一个user的主键id
      
首先就是要保证这两个类中,必须要分别有各自的一个连接; 也就是说在各个类中有另外一个类的一个属性;比如说:
class User
{
   private Card card;//card的一个属性
}
class Card
{
  
private User user;//user的一个属性
}

       这个时候配置就是在user的配置文件user.hbm.xml中;

      <one-to-one name="card" class="" cascade="save-update" property-ref="user"/>

           注意这里的property-ref属性:它是指在映射中,user找到card是通过user这样一个属性来找到的,如果不这样设置,那么就会在关联中出现user的id和card的id相关联的情况;
       而在card的配置文件中;
      
<many-to-one name="user" class="" column="userid" unique="true">

           注意这里column指如何找到user呢?是通过在表中的userid来找到的。而这里的
unique指的是限制为了一对一

    二、基于主键的约束

        这里仍然有两张表,这两张表分别是:user 和 card 而这个时候,在card表中,并没有userid 这一列,但是还是有一个参照userid的外键约束,这里的card中的id主要就是参照的是user中的id
        而上面基本上没有什么改变。只是在配置文件中;
        在user的配置文件中,
         
<one-to-one name="card" class="" cascade="save-update"/>
         这里不需要配置property-ref属性
        在card中
        
<one-to-one name="user" class="" constrainted="true"/>
         另外在主键中也要改;开始的时
            <id name="" type="">
               <column name=""/>
               <generator
class="native"/ >
            </id>
         这里应该改为:
             <id name="" type="">
               <column name=""/>
               <generator
class="foreign">
                   
<param name="property">user</param>
                </generator>
            </id>

2、一对多、多对一、以及双向多对一关联关系;
   
    首先讨论多对一的单向关联:这里有两张表;分别是email和user表;email为多的一方,而user为一 的一方,因为一个人可以有多个EMAIL
    email:id,emailname,uid;
    user: uid, uname
    有持久化类:User 和 Email

这里所谓单向就是说查询email表可以查出这个email是属于谁的,但是只查询user表不知道有多少个Email;

     因此在持久化类中在多的一方,有一个一的一方的对象的属性;而在一的一方没有这方面的信息;
    所以在配置的时候就只在多的一方(email)中配置
    <many-to-one name="user" class=""
column="uid "/>这样就够了;但是这个时候在持久化的时候需

   要都调用save方法,这个时候还要加个级联属性:cascade=“all(save-update)”,那么这个时候

只需要持久化这个email对象就够了,而不需要持久化user了。同时还有一个属性就是:outer-join   

;这个属性是指在查询的时候是否使用外连接;如果不使用,那么查询的时候就会查询两次;
   
    另外,再讨论一下一对多的单向关联:
    从一的一方看,这就是一对多的关系,表同上,只是在持久化中就有点区别了,这里在User中有个包

    含set集合的属性,而在email中没有任何的设置,先前的user属性也不需要了,因为这是单向的影射

   ,所以不需要这样的设置。而在映射文件中就只在uses一方设计就好了。
    <set name="emails" table="email">
      <key column="uid"></key> //这里的key是在email表中参照user表的外键
      <one-to-many class="Email"> //这里的class肯定是填的是many这一方的类名
    </set>
  
    最后再说一下多对一双向关联,只要把两边都加上,能让你找到我,让我找到你的话就可以了。

3、多对多关联(比较典型的就是权限设计的时候)
   在做多对多关联映射的时候,都会有一张关联表;
   第一、单向多对多
   第二、双向多对多
   单向多对多跟双向多对多本身没有多大的区别,只是必须有一边来维护他们之间的关系;
   比如说:有两张表;user 和 power表
   要建立它们的多对多的影射关系,那么这里必须在数据库中再建立一张表(连接表)user_power
   那么在持久化类中设置一个属性--set。那么需要在映射文件中配置这个set的映射
   <set name="" table="关联表名">
      <key column=""></key>
      <many-to-many class="" column="">
   </set>
   下面来解释一下中间属性的作用;
    A: name:这里就是配置在所在持久化类中的set属性名
    B:table:这里就是关联表名,因为它们的关系就是靠这张关联表来维护
    C:column:这里设置的是在关联表中,与持久化类所在表的关联字段
    D:class:这里的many端,也就是name所对应的类;
    E:第二个col

分享到:
评论

相关推荐

    hibernate实体关联关系映射

    Hibernate实体关联关系映射--学习总结,让同仁们更好的学习Hiebernate

    Hibernate实体关联关系映射--学习总结.pdf

    Hibernate实体关联关系映射--学习总结.pdf

    Hibernate实体关联速查表

    本速查表没有打成CHM! Hibernate实体映射表实用性较强! 希望大家喜欢!

    Hibernate_实体关联关系映射--学习总结

    Hibernate 实体关联关系映射 学习总结 把一对一 一对多 单向 双向 主键 外键 链接表等讲的比较清楚

    Hibernate实体映射

    :Hibernate有两种映射实体一对一关联关系的实现方式:共享主键方式和唯一外键方式。 共享主键方式: 所谓共享主键方式就是限制两个数据表的主键使用相同的值

    Hibernate_Annotation关联映射

    Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...

    hibernate单向一对多关联映射(注解版)

    hibernate单向一对多关联映射(注解版)

    hibernate实体关联

    详细描述了hibernate3中的实体映射

    hibernate学习笔记

    hibernate多对一关联映射(Hibernate_Many2One) 7 hibernate一对一主键关联映射(单向关联Person----&gt;IdCard) 8 hibernate一对一主键关联映射(双向关联Person&lt;----&gt;IdCard) 9 hibernate一对一唯一外键关联映射...

    hibernate的表关联操作-hibernate02

    hibernate的表关联操作,通过映射关系操作实体类增删改查数据库-hibernate02

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第15章 映射实体关联关系  15.1 映射一对一关联  15.1.1 按照外键映射   15.1.2 按照主键映射  15.2 映射单向多对多关联  15.3 映射双向多对多关联关系  15.3.1 关联两端使用元素  15.3.2 在inverse端使用...

    实体类对应关系处理hibernate

    自己根据课本总结的使用hibernate时,实体类间映射文件即*.hbm.xml文件的写法。如果你正在学习hibernate,保证会对你有所帮助。

    Hibernate3.1_学习源码

    案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了...07 07Hibernate_Mapping : Hibernate中的数据关联技术,是一个重点又是一个难点,演示了 一对一、多对一、一对多、多对多等几种情况。

    Spring和Hibernate学习笔记

    第四课:hibernate多对一关联映射 ...................... Spring: 第一课:构建Spring的环境并建立一个例子 第三课:spring Bean的作用域 第四课:spring对AOP的只是(采用Annotation的方式) 第五课:spring对AOP...

    Hibernate实战(第2版 中文高清版)

     第7章 高级实体关联映射   7.1 单值的实体关联   7.1.1 共享的主键关联   7.1.2 一对一的外键关联   7.1.3 用联结表映射   7.2 多值的实体关联   7.2.1 一对多关联   7.2.2 多对多关联   7.2.3 把...

    传智播客李勇hibernate源码1-20课

    传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍与动手入门体验;02_hibernate入门案例的细节分析; 03_hibernate入门案例的代码优化; 04_Session接口及get|... 20_一对一外键关联关系的映射与原理分析

    Hibernate Annotations 中文文档

    2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. ...

    hibernate程序设计

    第一讲 Hibernate概述 第二讲 对象-关系映射基础 第三讲 复杂实体映射 第四讲 关联映射 第五讲 Hibernate查询

    hibernate annotation 中文文档

    2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-one) 2.2.5.3. 集合类型 2.2.5.4. 用cascading实现传播性持久化(Transitive persistence) 2.2.5.5. 关联关系获取 2.2.6. 映射...

Global site tag (gtag.js) - Google Analytics