`

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是目前广泛使用的持久层框架,它采用对象关系映射(ORM)技术,将Java对象映射到关系型数据库中。在使用Hibernate进行数据持久化...总之,系统学习和实践Hibernate实体关联映射是每一位Java开发者必备的技能。

    hibernate多对多关联映射

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

    hibernate关联映射实例

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

    Hibernate实体关联速查表

    **Hibernate实体关联速查表详解** Hibernate作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据库事务。本速查表旨在提供关于Hibernate实体...

    Hibernate 的关联映射

    "Hibernate的关联映射"是Hibernate中的核心概念之一,用于模拟数据库中的关系,包括一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)和多对多(Many-to-Many)四种关系。现在,让我们详细探讨...

    hibernate的关联映射

    【hibernate关联映射详解】 Hibernate 是一款流行的Java持久层框架,用于简化数据库操作。在Hibernate中,关联映射是实现对象关系映射(ORM)的关键,它允许我们在对象模型和关系数据库之间建立联系。关联映射主要...

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

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

    Hibernate数据关联映射与继承策略

    **Hibernate数据关联映射** Hibernate 是一款强大的Java对象关系映射(ORM)框架,它允许开发者将数据库操作转化为对Java对象的操作,简化了数据库编程。在 Hibernate 中,数据关联映射是实现对象与数据库表之间...

    Hibernate实体映射

    本资源“Hibernate实体映射”提供了一个深入理解这一关键概念的机会,通过实例代码和教程笔记,帮助学习者更好地掌握Hibernate的核心功能。 一、Hibernate实体映射基础 在Hibernate中,实体映射是将Java对象模型与...

    Hibernate 关联关系映射分类

    一对多关联表示一个实体可以与多个其他实体相关联,但在这些多个实体中,每个实体只能与一个实体关联。一对多关联同样可以分为单向关联和双向关联。 #### 单向关联 - **多对一单向关联**:在这种关联中,多个实体...

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

    其中,“关联映射”是Hibernate中的一个重要概念,用于处理实体之间的关联关系,例如一对一、一对多、多对一以及多对多等。 #### 常用属性解析 为了更好地理解和运用Hibernate中的关联映射机制,我们需要深入了解...

    Hibernate关联映射.rar

    2. **实体类映射**:根据数据库表创建Java实体类,并使用Hibernate注解进行关联映射。 3. **配置Hibernate**:在IDEA中设置Hibernate的配置文件(hibernate.cfg.xml),包括数据库连接信息、方言、实体扫描路径等。 ...

    Hibernate关联映射

    在 Hibernate 中,一对一的外键单向关联意味着一个实体类中的属性指向另一个实体类,而另一个实体类并不知道这个关联。这种关联可以通过在 `many-to-one` 元素中添加 `unique="true"` 属性实现。例如,在 Person 类...

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

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

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

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

Global site tag (gtag.js) - Google Analytics