`
txidol
  • 浏览: 53602 次
  • 性别: 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学习笔记文档

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

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

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

    hibernate 学习笔记1

    ### 对象持久化与Hibernate学习笔记 #### 一、对象持久化的概念与重要性 - **定义**: 对象持久化是指将程序中的对象状态存储到持久化存储设备上的过程,以便在程序结束运行后仍然可以保留这些数据。 - **必要性**:...

Global site tag (gtag.js) - Google Analytics