一:多对一

<many-to-one

  1.name:当前类的属性名(关联映射的类)

  2.column:属性多对应的类的对应的表的外键(连接条件)

  3.class:属性所对应的类的权限定名

  4.not-null:不能为空(当持久化当前类对象时,此属性所对应的对象也就是关联映射的对象字段不能为空)

    注意:此值为true时,有可能报PropertyValueException:当持久化当前类,当前类被存入数据库,而关联字段对象没有存入数据库,但关联字段又不能为空,则导致异常

       当从数据库查询出当前类,但是关联字段对象在关联表里面找不到,导致关联字段对象为null也会报异常

  5.lazy:延迟加载(加载当前类对象时不加载该关联映射的对象,直到使用到此字段时才加载关联映射对象)

  6.cascade:save-update(级联更新):持久化当前类对象时自动持久化所有关联对象字段(注意:当持久化当前类对象时,默认不会持久化关联对象);类似的还有:delete级联删除;none:无;

    级联设置为:all-delete-orphan(all+delete-orphan):当存在父子关系时,父方的cascade设置为此值,子对象必须和一个父对象关联,不允许单独存在,如果删除父对象,所有关联的子对象需删除

    所有的操作都级联(删除,更新,游离对象等),如需设置则设置为:evict,delete,save-update等

/>

fetch属性:

  有两个可选值:join和select
  这个属性决定了你在查询的时候,是先查主表记录再查关联记录,还是要把关联表的记录一起查询出来。
  select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询
  如果lazy=true(延迟加载),select在查询时只会查出主表记录,用到了关联数据时再自动在执行查询
  而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。

二:一对多

<set name: cascade: inverse:>

  <key column=/>

  <one-to-many class=/>

<set/>

inverse属性:

  当出现双向关联时:如果修改双向关联中的某一个对象值,由于有双向关联,则双方对象的属性值都发生了改变,则hibernate会在两方各执行一次更新语句来更新表,实际上对于数据库来说只需要执行一次即可;
  因此:在一对多的双向关联时,在"one"方设置inverse=true,来提高性能;在建立两个对象的双向关联时,同时修改关联两端的对象的相应属性   
  Hibernate中的inverse在表关系映射中经常应用  inverse的值有两种,“true”和“false”。inverse="false"是默认的值  inverse的作用:在hibernate中是通过inverse的设置来决定是有谁来维护表和表之间的关系的。  我们说 inverse设立不当会导致性能低下,其实是说inverse设立不当,会产生多余重复的SQL语句甚至致使JDBC exception的throw。这是我们在建立实体类关系时必须需要关注的地方。一般来说,inverse=true是推荐使用,双向关联中双方都设置 inverse=false的话,必会导致双方都重复更新同一个关系。但是如果双方都设立inverse=true的话,双方都不维护关系的更新,这也是 不行的,好在一对多中的一端:many-to-one默认是inverse=false,避免了这种错误的产生。但是多对多就没有这个默认设置了,所以很 多人经常在多对多的两端都使用inverse=true,结果导致连接表的数据根本没有记录,就是因为他们双分都没有责任维护关系。所以说,双向关联中最 好的设置是一端为inverse=true,一端为inverse=false。一般inverse=false会放在多的一端,那么有人提问了, many-to-many两边都是多的,inverse到底放在哪儿?其实hibernate建立多对多关系也是将他们分离成两个一对多关系,中间连接一个连接表。所以通用存在一对多的关系,也可以这样说:一对多是多对多的基本组成部分

注意:set关联属性最好直接初始化new hashSet()以免产生null异常

												

Hibernate的关联映射关系的更多相关文章

  1. Hibernate关联映射关系

    Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...

  2. Hibernate注解----关联映射注解以及课程总结详解----图片版本

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  3. Hibernate的关联映射——单向1-N关联

    Hibernate的关联映射--单向1-N关联 单向1-N关联的持久化类里需要使用集合属性.因为1的一端需要访问N的一端,而N的一端将以集合(Set)形式表现.从这个意义上来看,1-N(实际上还包括N ...

  4. Hibernate的关联映射——单向N-1关联

    Hibernate的关联映射--单向N-1关联 N-1是非常常见的关联关系,最常见的父子关系也是N-1关联,单向的N-1关联只需从N的一端可以访问1的一端. 为了让两个持久化类能够支持这种关联映射,程 ...

  5. Hibernate之关联映射(一对多和多对一映射,多对多映射)

    ~~~接着之前的Hibernate框架接着学习(上篇面试过后发现真的需要学习以下框架了,不然又被忽悠让去培训.)~~~ 1:Hibernate的关联映射,存在一对多和多对一映射,多对多映射: 1.1: ...

  6. 初识Hibernate之关联映射(二)

    上篇我们介绍了关联映射的几种形式,有单向多对一,单向一对多,还有双向一对多.本篇接着介绍有关关联映射的其他几种映射方式,主要有以下几种: 基于外键的单向一对一关联映射 基于主键的单向一对一关联映射 单 ...

  7. Hibernate的关联映射——双向1-N关联

    Hibernate的关联映射--双向1-N关联 对于1-N的关联,Hibernate推荐使用双向关联,而且不要让1的一端控制关联关系,而是用N的一端控制关联关系.双线的1-N关联和N-1关联是两种相同 ...

  8. Hibernate的关联映射——单向1-1关联

    Hibernate的关联映射--单向1-1关联 对于单向的1-1关联关系,需要在持久化类里增加代表关联实体的成员变量,并为该成员变量添加setter方法和getter方法.从持久化类的代码上看,单向1 ...

  9. Hibernate的关联映射

    单向N-1关联 <many-to-one> 单向N-1关系,比如多个人对应同一个住址,只需要从人实体端找到对应的住址实体,无须关系某个地址的全部住户.程序在N的一端增加一个属性,该属性引用 ...

随机推荐

  1. MongoDB学习笔记~官方驱动的原生Curd操作

    回到目录 MongoDB的官方C#驱动,让我们使用起来也很方便,但对于Linq开发人员来说,可能有些不了解,所以,我还是将官方驱动进行了二次封装,而对于一个比较个性化的mongo操作,使用我封装的也很 ...

  2. Hadoop Cluster 安装

    本篇源自Hadoop官网,先将中文翻译如下. 目标 本文章主要是描述如何安装和配置几个节点的Hadoop clusters,甚至于数以千计的节点数.为了了解详细的安装步骤,需要先了解如何安装在单台机器 ...

  3. 2016 最佳 Linux 发行版排行榜

    2015年,不管在企业市场还是个人消费市场都是 Linux非常重要的一年.作为一个自2005年起就开始使用 Linux的 Linuxer ,我门见证了 Linux在过去十年的成长.2016 Linux ...

  4. java强引用、软引用、弱引用、虚引用

    前言概述 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象.这就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走 ...

  5. [转]17个新手常见Python运行时错误

    原址:http://www.oschina.net/question/89964_62779?p=1 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的 ...

  6. 【小白的CFD之旅】03 老蓝

    第一次见到老蓝,小白都不太敢相信,对面那不修边幅的糟老头子会是自己要找的导师.嘴里叼着烟,牙都掉了好几颗,穿着还算整齐,这是小白对老蓝的第一印象,这印象并不太好,尤其是在小白发誓认真度过研究生三年时光 ...

  7. django url路径与模板中样式相对路径的问题

    static目录下有css和js及image等文件夹,里面放置网站的一些静态文件,static位于网站根目录下,django中配置静态文件这个就细说,网上都有,昨天在添加新内容时发现一个问题,我的ur ...

  8. java设计模式之组合模式

    组合模式 组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 & ...

  9. 第21章 java线程(1)-线程初步

    java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...

  10. 第8章 Java类的三大特性之一:封装

    1.什么是封装 1.1概念 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问.主要是类的属性 1.2好处 a.只能通过规定的方法访问数据b.隐藏类 ...