`

Hibernate的关联关系

阅读更多

Hibernate的关联关系:

1、一对一

  


 

2、一对多|多对一

在实际编写程序时,一对多关系有两种实现方式:单向关联双向关联单向的一对多关系只需在一方进行映射配置,而双向的一对多关系需要在关联的双方进行映射配置。

  下面以客户(Customer)与订单(Order)为例:

  2.1、单向关联

  Customer类的映射文件(Customer.hbm.xml)

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain" >
    <class name="Customer" table="t_customer"  >
        <id name="id"  >
            <generator class="native"></generator>
        </id>
        <property name="name"   ></property>
        
        
        <!-- 
            set元素: 将实体中的集合属性注册
                name属性: 填写集合 属性的名称
            key元素: 配置别人引用我的外键名称
                column属性:指定外键名称
            one-to-many元素: 描述集合表达的关系.one-to-many表达一对多关系
                class属性: 描述我与谁是一对多
                
            cascade 级联 => 配置希望通过set完成哪些级联操作
                save-update(偶尔会用): 级联保存|级联更新. 在持久化Customer时,会级联持久化Customer中的瞬时状态(save)对象或游离状态(update)的Order对象
                delete(绝对不用): 级联删除. 删除Customer时,会级联删除Customer下的Order
                all(绝对不用): save-update+delete;
                delete-orphan(绝对不用):孤儿删除. 自动将不属于任何客户的订单删除.
                all-delete-orphan(绝对不用): save-update+delete+delete-orphan;
                none:默认值.没有任何级联操作. 
            
            inverse 反转 : 配置我是否不维护关联关系
                true:  不维护
                false(默认值):  维护
        
         -->
        <set name="orders"  >
            <key column="cid" ></key>
            <one-to-many class="Order" />
        </set>
    </class>
</hibernate-mapping>
复制代码

 

 

补充:<set>元素描述的字段,它的各个属性的含义如下:

(1)name:字段名

(2) table:关联表名

(3)lazy:是否延迟加载。lazy=false表示立即加载

(4)inverse:用于表示双向关联的被动的一端。inverse的值为false的一方负责维护关联关系,默认值为false。

(5)cascade:级联关系。cascade=all表示所有情况下均进行级联操作,即包含save-update和delete操作。

(6)sort:排序关系其可选值为unsorted(不排序),natural(自然排序),comparatorClass(由某个实现了java.util.comparator接口的类型指定排序算法)。

(7)<key>:子元素的column属性指定关联表的外键。

(8)<one-to-many>:子元素的class属性指定了关联类的名字。

  2.2、双向关联

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain" >
    <class name="Order" table="t_order"  >
        <id name="id"  >
            <generator class="native"></generator>
        </id>
        <property name="price"   ></property>
        
        <!-- many-to-one元素: 表达多对一关系 
                name属性: 引用的对象属性名
                column属性: 我引用对方的外键名称
                class属性: 表达我与谁是多对一关系
                
            Cascade属性
                save-update(偶尔): 保存订单时,级联保存客户(自动将关联的瞬时转持久).  更新订单时,级联更新客户(自动将游离转持久).
                delete(绝对不用):    删除订单时,级联删除与我关联的客户(自动将关联的持久转瞬时).
                all(绝对不用): save-update+delete;
                none(最常用): 默认值.没有级联
            inverse属性不存在. => 多的一方必须维护外键.不能放弃.
        -->
        <many-to-one name="customer" column="cid" class="Customer"  ></many-to-one>
        
    </class>
</hibernate-mapping>
复制代码

 

 

 


 

3、多对多

  下面以学生(Student)和课程(Coursel)为例:

  Student.hbm.xml 

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain" >
    <class name="Student" table="t_student"  >
        <id name="id"  >
            <generator class="native"></generator>
        </id>
        <property name="name"   ></property>
        
        <!-- set元素: 表达集合
                name属性: 集合的属性名
                table属性: 指定多对多中间表表名
            key元素: 配置外键名称
                column属性: 填外键名称
            many-to-many元素: 表达我与Course是多对多关系
                class属性:我与谁有多对多关系
                column属性: 我引用别人的外键名称键
         -->
        
        <set name="courses" table="t_sutdent_course" >
            <key column="sid" ></key>
            <many-to-many class="Course" column="cid" ></many-to-many>    
        </set>
    </class>
</hibernate-mapping>
复制代码

  Course.hbm.xml

 

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.domain" >
    <class name="Course" table="t_course"  >
        <id name="id"  >
            <generator class="native"></generator>
        </id>
        <property name="name"   ></property>
        
        <!-- set元素: 表达集合
                name属性: 集合的属性名
                table属性: 指定多对多中间表表名
            key元素: 配置外键名称
                column属性: 填外键名称
            many-to-many元素: 表达我与Course是多对多关系
                class属性:我与谁有多对多关系
                column属性: 我引用别人的外键名称键
                
            cascacde属性: 选择级联操作
                save-update(偶尔使用)    级联保存和更新与我关联的对象
                delete(绝对不用)    级联删除与我关联的对象
                all(绝对不用)    save-update+delete
                delete-orphan(绝对不用)    孤儿删除
                all-delete-orphan(绝对不用)    all+delete-orphan
                none(常用)    默认值 
            inverse属性: 选择我是否不维护关联关系
                false: 我维护 (默认值)
                true: 我不维护
            注意:多对多关系中,必须有一方放弃维护关联关系. 
         -->
        
        <set name="students" table="t_sutdent_course"  inverse="true" >
            <key column="cid" ></key>
            <many-to-many class="Student" column="sid" ></many-to-many>    
        </set>
    </class>
</hibernate-mapping>
分享到:
评论

相关推荐

    Hibernate关联关系

    ### Hibernate关联关系详解 在Java开发领域中,Hibernate作为一个强大的对象关系映射(ORM)框架,为开发者提供了方便地操作数据库的方式。通过将Java对象与数据库表进行映射,Hibernate大大简化了数据持久化层的...

    hibernate关联关系总结

    Hibernate关联关系是Java持久化框架Hibernate中的核心概念,它允许我们在数据库中建立对象之间的关系映射,以便在程序中操作对象时,可以自动处理与数据库的交互。本篇将深入探讨Hibernate的四种主要关联关系:一对...

    Hibernate 关联关系解除

    一、Hibernate关联关系介绍 在Hibernate中,关联关系主要包括以下几种: 1. 一对一(OneToOne):一个实体对应另一个实体的唯一实例。 2. 一对多(OneToMany):一个实体可以与多个其他实体相关联。 3. 多对一...

    Hibernate 关联关系映射分类

    在深入探讨Hibernate关联关系映射分类之前,我们首先简要回顾一下Hibernate框架的基本概念。Hibernate是一种持久层框架,主要用于Java应用程序中的对象关系映射(ORM),它能够将面向对象的数据模型转换为数据库中的...

    Hibernate关联关系练习【全】

    总之,Hibernate关联关系是理解其工作原理的关键,它使得Java对象和数据库记录之间的映射变得简单。通过练习,你可以掌握如何配置和使用这些关系,以及如何进行相关的查询操作,从而提升你的开发效率和代码质量。...

    hibernate关联关系实例

    在这个“hibernate关联关系实例”中,我们将深入探讨四种基本的关联关系:一对一(One-to-One)、一对多(One-to-Many)、多对一(Many-to-One)以及多对多(Many-to-Many),同时也会涉及Hibernate查询语言(HQL)...

    hibernate关联关系2

    在本项目中,"hibernate关联关系2"是一个关于使用Hibernate框架处理数据库关联关系的实战案例。Hibernate是一个流行的开源对象关系映射(ORM)工具,它允许开发人员使用Java对象来操作数据库,极大地简化了数据库...

    Hibernate关联关系映射目录

    ### Hibernate关联关系映射 #### 一、单向关联 单向关联指的是对象之间的关联关系只在一个方向上存在,也就是说这种关联关系仅在一个类中表示出来,在另一个类中不体现这种关联。 ##### 1. 一对一外键单向关联 ...

    hibernate关联关系映射

    "hibernate关联关系映射"是Hibernate的核心概念之一,它定义了如何在Java对象和数据库表之间建立关系。以下是对这个主题的详细讲解: 一、一对一关系映射(One-to-One) 一对一关系是指一个实体对应另一个实体的...

    Hibernate关联关系配置

    ### Hibernate关联关系配置详解 #### 一、一对多与多对一关系配置 在软件开发过程中,实体之间的关联关系是常见的需求之一。其中,“一对多”与“多对一”的关系尤为常见,这类关系通常用来表示实体之间的层级或...

    Hibernate关联关系疑问

    这篇博客"Hibernate关联关系疑问"可能探讨了在使用Hibernate处理对象关系映射(ORM)时遇到的一些关联问题。在ORM中,关联关系是数据库表之间的连接,如一对一、一对多、多对一和多对多关系。 1. **一对一关联...

    Hibernate关联关系映射.CHM

    Hibernate关联关系映射.CHM Hibernate文档相关

    hibernate关联关系之一对一双向关联

    这种关联关系可以是单向的,也可以是双向的,而这里的"hibernate关联关系之一对一双向关联"着重讨论的是后者。双向关联意味着两个实体类都可以直接访问对方,提供了更方便的数据操作。 在Hibernate中,一对一双向...

    Hibernate关联关系映射实例速查

    Hibernate关联关系映射实例速查,帮助初学者学习。

    hibernate关联关系

    综上所述,本教程涵盖了Hibernate关联关系的基础知识,包括1对1、一对多和多对多的实现,以及如何在关联关系中进行增删改查操作。结合MySQL数据表文件,初学者可以更好地理解这些概念并应用于实际项目中。在实践中...

    Hibernate关联关系的CRUD和集合映射(annotation)

    ### Hibernate关联关系 关联关系是指在Java对象与数据库表之间建立的连接。主要有以下几种类型: 1. **一对一(OneToOne)**:一个实体对应表中的唯一一行数据。可以通过`@OneToOne`注解来定义,可以设置`fetch`...

    HIbernate关联关系总结

    在Java的ORM(对象关系映射)框架Hibernate中,关联关系是将数据库中的表与Java对象之间建立联系的重要机制。本篇文章将详细讲解Hibernate的两种单向关联关系:单向1-N关联和单向N-1关联。 1. **单向1-N关联** 在...

    Hibernate关联关系总结

    本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...

    Hibernate关联关系.doc

    在Java持久化框架Hibernate中,关联关系映射是核心特性之一,它允许对象模型与数据库中的关系模型对应。本文将详细解析三种基本的关联关系:多对一、一对多以及一对一,以及它们在Hibernate中的配置。 1. **多对一...

Global site tag (gtag.js) - Google Analytics