`
txidol
  • 浏览: 54510 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate学习笔记(八)【映射实体关系】

阅读更多

本文只简略的介绍关系,详细标签描述参考http://blog.csdn.net/tanxiang21/article/details/8034105

 

一对一

Monkey.hbm.xml

 

    <one-to-one name="address" 
        class="mypack.Address"
        cascade="all" 
     />

 

Address.hbm.xml

 

 <class name="mypack.Address" table="ADDRESSES" >
    <id name="id" type="long" column="ID">
      <generator class="foreign">
        <param name="property">monkey</param>
      </generator>
    </id>
    <one-to-one name="monkey" 
        class="mypack.Monkey"
       constrained="true"
    />
</class>

 

说明:Address constrained="true" generator class="foreign"

ADDRESSES表ID主键做为外键,两表表共享OID

显然,Monkey 与Address存在主从关系。

数据库一对一,还有映射继承关系的 参考http://blog.csdn.net/tanxiang21/article/details/8045851

 

多对多

Monkey 和Teacher是多对多,Learning是中间表

【组件型式】多对多形式:

<hibernate-mapping >
  <class name="mypack.Monkey" table="MONKEYS" >
    <id name="id" type="long" column="ID">
      <generator class="increment"/>
    </id>
    <property name="name" column="NAME" type="string" />  
    <set name="learnings" lazy="true" table="LEARNING" >
        <key column="MONKEY_ID" />
        <composite-element class="mypack.Learning" >
          <parent name="monkey" />
          <many-to-one name="teacher" class="mypack.Teacher" column="TEACHER_ID" not-null="true"/>
          <property name="gongfu" column="GONGFU" type="string" not-null="true" />
         </composite-element> 
    </set>     
  </class>
</hibernate-mapping>

说明:中间表LEARNING映射Learning类以集合组建形式属于Monkey类,然后和Teacher存在多对一的关联

Learning类共享Monkey类OID,操作时候一样是相互保存双方,同通常的多对多保存方式。

<composite>标签 和 组成关系<component>标签需区分,映射组成关系:http://blog.csdn.net/tanxiang21/article/details/8130201

<composite>标签 和 值类型集合<set>标签的区分是 里面不是<element> ,映射值类型集合http://blog.csdn.net/tanxiang21/article/details/8134107

【标准】多对多 数据库有中间表,中间表无对应BEAN

<hibernate-mapping >
  <class name="mypack.Monkey" table="MONKEYS" >
    <id name="id" type="long" column="ID">
      <generator class="increment"/>
    </id>
    <property name="name" column="NAME" type="string" />      
    <set name="teachers" table="LEARNING"
        lazy="true"
        cascade="save-update">
        <key column="MONKEY_ID" />
        <many-to-many class="mypack.Teacher" column="TEACHER_ID" />
    </set>       
  </class>
</hibernate-mapping>
<hibernate-mapping >
  <class name="mypack.Teacher" table="TEACHERS" >
    <id name="id" type="long" column="ID">
      <generator class="increment"/>
    </id>
    <property name="name" column="NAME" type="string" />   
    <set name="monkeys" table="LEARNING"
        lazy="true"
        inverse="true"
        cascade="save-update">
        <key column="TEACHER_ID" />
        <many-to-many class="mypack.Monkey" column="MONKEY_ID" />
    </set> 
  </class>
</hibernate-mapping>

说明:标准版得多对多,然后JAVA保存相互关联关系时,两边都要设置对方,

注意下inverse,而数据库只发一条修改语句

 

中间表做BEAN,中间可做个关系属性 一对多 多对一

<hibernate-mapping >
  <class name="mypack.Monkey" table="MONKEYS" >
    <id name="id" type="long" column="ID">
      <generator class="increment"/>
    </id>
   <property name="name" column="NAME" type="string" />   
   <set name="learnings" lazy="true" inverse="true" cascade="save-update">
        <key column="MONKEY_ID" />
        <one-to-many  class="mypack.Learning" />
   </set>   
  </class>
</hibernate-mapping>
<hibernate-mapping >
  <class name="mypack.Learning" table="LEARNING" >
    <id name="id" type="long" column="ID">
      <generator class="increment"/>
    </id>
    <property name="gongfu" column="GONGFU" type="string" />    
    <many-to-one name="monkey" column="MONKEY_ID" class="mypack.Monkey" not-null="true" />
    <many-to-one name="teacher" column="TEACHER_ID" class="mypack.Teacher" not-null="true" /> 
  </class>
</hibernate-mapping>
<hibernate-mapping >
  <class name="mypack.Teacher" table="TEACHERS" >
    <id name="id" type="long" column="ID">
      <generator class="increment"/>
    </id>
    <property name="name" column="NAME" type="string" />  
     <set name="learnings" lazy="true" inverse="true" cascade="save-update">
        <key column="TEACHER_ID" />
        <one-to-many  class="mypack.Learning" />
     </set> 
  </class>
</hibernate-mapping>

说明:其实就是多对多,变为了 一对多 多对一 ,注意可以级联保存,无限级联~ 无限级联~


备注:文章示例代码来源:《Hibernate逍遥游记》孙卫琴,可能有部分改造,解释部分纯属个人经验。

 

 

分享到:
评论

相关推荐

    Hibernate学习笔记特别详细

    《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...

    Java相关课程系列笔记之十四Hibernate学习笔记

    【Java相关课程系列笔记之十四Hibernate学习笔记】 Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。本笔记将详细阐述Hibernate的核心概念、使用方法和特性。 一、...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    hibernate学习笔记mashibing

    《Hibernate学习笔记——马士兵教程解析》 在Java开发领域,ORM(Object-Relational Mapping)框架的使用已经非常普遍,其中Hibernate作为一款优秀的ORM框架,因其强大的功能和易用性深受开发者喜爱。本文将根据马...

    hibernate学习笔记文档

    ### Hibernate 学习笔记知识点概览 #### 一、Hibernate 概述 - **定义**:Hibernate 是一款开源的对象关系映射(ORM)框架,它实现了将 Java 应用程序中的对象模型映射到关系型数据库中的记录。通过 ORM 技术,...

    Hibernate学习笔记与总结

    **Hibernate学习笔记与总结** Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本文将深入探讨Hibernate的核心概念、配置、实体类、映射文件、...

    Hibernate实体映射

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

    马士兵hibernate学习笔记(原版)

    《马士兵Hibernate学习笔记》是一份深入浅出的教程,旨在帮助初学者掌握Hibernate这一流行的Java持久化框架。Hibernate是一个对象关系映射(ORM)工具,它允许开发者用面向对象的方式来操作数据库,从而减少了传统...

    hibernate API帮助文档 及hibernate学习笔记

    Hibernate是一款强大的Java持久...通过阅读这份“Hibernate API帮助文档”和“Hibernate学习笔记”,你将能够深入理解Hibernate的工作原理,掌握其API的使用,并能在实际项目中有效地利用Hibernate进行数据持久化操作。

    hibernate学习笔记

    Hibernate 是一个开源的对象关系映射框架,它允许开发者将Java对象和关系数据库的数据进行映射,从而简化数据库操作。在本篇文章中,我们将深入探讨 Hibernate 的核心概念和使用方法。 首先,创建 Hibernate 项目的...

    hibernate学习笔记第二天的源码

    在深入探讨Hibernate学习笔记第二天的源码之前,我们先来理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者将数据库操作转化为对象模型,大大简化了数据访问层的开发...

    hibernate学习笔记第四天的源码

    **hibernate学习笔记第四天源码解析** 在hibernate学习的过程中,第四天通常会深入探讨实体类、映射文件、配置文件以及查询语言等方面的内容。这些是hibernate框架的基础,也是开发者掌握持久化操作的关键。让我们...

    马士兵java框架hibernate学习笔记

    ### 马士兵Java框架Hibernate学习笔记 #### 一、HelloWorld - **知识点概述**: - **项目搭建**:介绍了如何从零开始搭建一个简单的Hibernate项目。 - **环境配置**:包括了如何配置MySQL数据库、创建必要的表...

    Hibernate学习笔记源码及文档

    **Hibernate学习笔记源码及文档** Hibernate 是一款强大的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库交互。本资源包含了Hibernate的学习笔记、源码分析以及开发流程说明文档...

    达内HIBERNATE学习笔记

    根据提供的信息,我们可以总结出以下关于达内HIBERNATE学习笔记的重要知识点: ### 第一章:Hibernate入门 #### 1.1 学习目标 - 理解Hibernate的基本概念。 - 掌握如何使用Hibernate进行开发。 #### 1.2 对象持久...

    hibernate学习笔记.

    【hibernate学习笔记】 在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它极大地简化了数据库操作。以下是对Hibernate的学习要点的详细解释: 1. **建立第一个Hibernate版本的HelloWorld** - **...

    马士兵hibernate学习笔记

    ### 马士兵Hibernate学习笔记知识点总结 #### 一、HelloWorld示例 - **目的**:通过简单的示例理解Hibernate的基本使用流程。 - **步骤**: - 创建Java项目`hibernate_0100_HelloWorld`。 - 建立库依赖,包括...

    hibernate学习笔记,学习大纲【吐血推荐】

    **Hibernate学习笔记与大纲** Hibernate 是一款开源的Java语言下的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发人员可以使用面向对象的方式处理数据,而无需过多关注底层的SQL语句。本笔记将深入...

    尚学堂hibernate学习笔记(原版整理)

    【尚学堂Hibernate学习笔记】是一份详尽的学习资料,旨在帮助初学者理解并掌握Hibernate这一流行的Java对象关系映射(ORM)框架。该笔记由作者根据马士兵老师的教程整理而成,其中包含了个人的学习注解,使得内容...

Global site tag (gtag.js) - Google Analytics