2019独角兽企业重金招聘Python工程师标准>>>

inverse : 用于控制表与表之间的关系,默认值为“false”,一般在多对多或一对多双向关联中常见,例如在student和courser表中,产生一个sc表,如果我们对hbm文件中inverse值取默认,那么此时就由student和course共同维护它们之间的关系,也就是对其中任何一个表操作时,都会改变sc表。当在关系的一头将inverse设置为true,那么就将管理权交给它的对应端。例如:我们将student.hbm.xml中set或bag的属性inverse设置为true,那么就表示将控制权交给course,此时对student的任何操作都不会影响sc,只有courser能够影响sc。

在多对多的映射中,无论哪一方维护表之间的关系,都没有太大的关系,然而在一对多的双向关联中,如果由一的那方去维护,

对一的操作就会导致在多的那方与之关联的记录都会被操作。因此我们通常在一对多的双向关联中,将表之间的维护关系交给多的那方。

fetch参数指定了关联对象抓取的方式是select查询还是join查询,select方式时先查询返回要查询的主体对象(列表),再根据关联外键id,每一个对象发一个select查询,获取关联的对象,形成n+1次查询; 而join方式,主体对象和关联对象用一句外键关联的sql同时查询出来,不会形成多次查询。 如果你的关联对象是延迟加载的,它当然不会去查询关联对象。

Fetch只对于get或load或creteria起作用,对HQL并不起作用,除非在HQL显示指定join

outer-join关键字(many-to-one的情况)

outer-join关键字有3个值,分别是true,false,auto,默认是auto。

true: 表示使用外连接抓取关联的内容,这里的意思是当使用load(OrderLineItem.class,"id")时,Hibernate只生成一条SQL语句将OrderLineItem与他的父亲Order全部初始化。

select * fromOrderLineItem o left join Order p on o.OrderId=p.OrderId  where o.OrderLineItem_Id=?

false:表示不使用外连接抓取关联的内容,当load(OrderLineItem.class,"id")时,Hibernate生成两条 SQL语句,一条查询OrderLineItem表,另一条查询Order表。这样的好处是可以设置延迟加载,此处要将Order类设置为 lazy=true。

select * fromOrderLineItem o where o.OrderLineItem_Id=?

select * from Orderp where p.OrderId=?

auto:具体是ture还是false看hibernate.cfg.xml中的配置

注意:在集合中lazy与outer-join不能同时为true。当outer-join时,lazy的值对outer-join无影响。

cascade表示级联关系,用于维护表与表之间的关系操作

例如在team(一)对student(多)中,如果我们将team.hbm.xml中的set元素的属性cascade值设置为all,那么我们对team的操作,都会关联到与之对应的student上。如果我们队team进行delete操作,就会将在student中与之对应的外键置为null,save team就会save关联的student,update team 就会update关联的student的外键。如果我们在student.hbm.xml的many-to-one中设置cascade为true,那么我们对student的保存也会保存与之关联的team,但是对update和delete操作只对student本身起作用。

通过实践:当我们在一对多的关联中,将一的那方的配置文件中集合(set)cascade设置为all ,当我们删除一的那方时,就会导致在多的那方与之关联的外键置为null,然后才将一删除。如果此时我们将集合中的inverse设置为true,那么将会使操作失败。

Lazy属性有true和false两个值,表示是否延迟加载,为true时,表示是延迟加载,为false表示立即加载。例如在team和student中,如果将team.hbm.xml中的set元素lazy属性设置为true,表示当我查询team时,并没有立即查询出对应的student。

Lazy在set中默认值为true  ,在many-to-one、one-to-one中的默认值为false

当outer-join为true时,lazy的值无影响,此时用left outer join查询方式

当outer-join为false时,按照lazy方式,进行select查询

在以上情况中,fetch分别对应于join、select时,同样适用。

当fetch与outer-join同时使用时,fetch将会覆盖outer-join

get与load的区别:使用get方法时,会立即向数据库发送SQL语句,而load不会,load会首先产生代理,当需要用到某个对象或属性时,才会发送SQL语句,如果不存在,那么就会抛出异常。而对于get查询不存在就会得到null。

在关联级别类的操作中,get与load的查询方式取决于配置文件。

在类级别的操作中,get方法会立即发送一个SQL语句,而load任然在我们使用属性时才发送SQL语句。

转载于:https://my.oschina.net/pangzhuzhu/blog/318030

Hibernate中hbm.xml文件的inverse、cascade、fetch、outer-join、lazy相关推荐

  1. 用eclipse配置hibernate的hbm.xml文件时遇到的一些问题

    <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber ...

  2. hibernate中*.hbm.xml配置文件的各种映射关系配置方法(多对一,多对多)

    多对一: 多个用户对应一个部门,是多对一的关系,要在多方配,即在用户的hbm.xml文件中配 <many-to-one name="department" class=&qu ...

  3. hibernate中的映射文件xxx.hbm.xml详解总结

    一.Hibernate映射文件的作用: Hibernate映射文件是Hibernate与数据库进行持久化的桥梁 二,Hibernate映射文件主要内容:     (1).映射内容的定义: Hibern ...

  4. 经由过程MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件

    1.?? 媒介 星多夜空亮,人多聪明广很多人都在应用myEclipse,很多公司也都应用hibernate框架,老版本的hibernate中,因为没有annotation,我们须要写两个文件来保护表与 ...

  5. 工具-eclipse-hibernate关于快速生成*.hbm.xml文件,与bean文件的操作,不使用hibernate tool解决办法之一,主要为了快速开发,写的小工具

    实现思想:就是java对目标表的字符串的处理,以及基础的sql语句 不能使用hibernate tool ,解决办法 为了记录,以后也许还会用的小工具 **工具优点:比手打生成快,能加快hiberna ...

  6. 利用Eclipse/MyEclipse 实体类生成.hbm.xml文件

    在Struts+Hibernate+Spring 三大框架开发web程序的时候,通常为了节省开发间,提高开发效率,通常会使用到许多三方插件,那么这次要给大家分享的是如何利用Eclipse/MyEcli ...

  7. [转]解决Eclipse中编辑xml文件的智能提示问题

    转自:http://hi.baidu.com/cghroom/item/48fd2d0dc1fc23c675cd3c3e 摘要:  Eclipse for Android xml 文件代码自动提示功能 ...

  8. SQL Server中读取XML文件的简单做法

    SQL Server 2000使得以XML导出数据变得更加简单,但在SQL Server 2000中导入XML数据并对其进行处理则有些麻烦.本文介绍在SQL Server中读取XML文件的简单做法. ...

  9. ajax 文件数据流,Ajax如何读取数据流中的xml文件?

    Ajax如何读取数据流中的xml文件? 这是我的源代码,请大家帮忙看看,我读到的怎么都是空值.是不是方法错了? var xmlHttp; function createXMLHttpRequest() ...

最新文章

  1. 嵌入式开发中使用DDD进行调试
  2. HTML常用特效代码
  3. 【2018.10.20】noip模拟赛Day3 二阶和
  4. 分别使用 XHR、jQuery 和 Fetch 实现 AJAX
  5. 黑客宣言_情感设计宣言
  6. 为什么你没有选择xamarin?
  7. FedNLP: 首个联邦学习赋能NLP的开源框架,NLP迈向分布式新时代
  8. Gradle学习之构建java与web项目
  9. docker build报错
  10. Mybatis——动态SQL实现数据的增删改查
  11. Linux使用cups进行打印
  12. 小程序如何添加外部字体库
  13. 数理统计 —— 总体、样本、统计量及其分布
  14. Linux: sctp 实例
  15. java抖音字符视频_代码生成抖音文字视频
  16. 解决teamviewer达到设备数量上限
  17. 微信计步器怎么不计步_微信计步器怎么用?微信计步器在哪里?
  18. 现货黄金的优越性是什么?
  19. Swift中键盘的弹出隐藏,页面抬高,Return键等的配置
  20. 一种基于子序列的亚细胞定位预测的深度学习框架(DeepLncLoc: a deep learning frame work for long non-coding RNA subcellular)

热门文章

  1. 20211102:数字滤波器按照实现结构的分类及其优缺点总结
  2. sqlite expert 未找到提供程序。该程序可能未正确安装_SolidWorks2019安装过程中出现常见问题及解决方案...
  3. img 显示默认图片,及动态赋值
  4. VB ListBox 添加不重复的值
  5. 英语总结系列(四):寻觅激励自我之道
  6. 不狂热不忧虑:观看波士顿动力机器人视频的正确姿势
  7. 腾讯225页报告:AI正取代互联网成为新引擎,马化腾提七大关键词
  8. Android-返回桌面?退出程序?
  9. Linux Telnet用法详解
  10. NFS==network file system