hibernate get/load 懒加载 fetch
来源:互联网 发布:武钢裁员5万人 知乎 编辑:程序博客网 时间:2024/05/27 09:46
hibernate 的get/load区别,懒加载,fetch的概念以前老是并不清楚。现在总结一下,发现它们不是一个单独的概念,是有联系的。
一 get/load 的区别
1、查询过程
get 先查询一级缓存(session缓存),再查询二级缓存,如果没有查询到再查询数据库(在这一步发出sql语句)。
load 先查询一级缓存(session缓存), 如果没有则生成代理对象,代理对象的initialized属性为false,target属性为null,如果访问代理对象的属性(在这一步发出sql,initialized修改为true,target修改为真实对象),访问对象属性(除id外)的时候发出sql
2 、从返回结果
get方法检索不到的话会返回null,load方式检索不到的话会抛 org.hibernate.ObjectNotFoundException异常
get 方法返回的是实体对象(如果session缓存中有代理对象,则返回代理对象), load方法返回的是代理对象
3、get/load是否有效和lazy的配置有关,下面在懒加载机制中会详细介绍
4、load方法实际是用的单个对象的懒加载。
二 懒加载
1、实体对象的延迟加载 lazy=”true/false”
要想在实体对象使用懒加载,必须在配置lazy=“true”(默认)和同时使用load 方法
如果配置lazy=”false”,load方法会失效。
当访问对象属性时发出sql
2、集合类型的延迟加载 lazy=”true/false/extra”
配置lazy=”true”
一, 集合对象的延迟加载 还分为两种情况
1,如果是通过load/get得到单个对象,则查询多方的sql 在get对象的集合属性时发出
2、如果是通过find到一方的集合,在遍历一方集合中,拿出一方的一个对象直接get集合属性不会发出sql
必须在开始遍历这个集合时才发出sql
三 fetch的用法
fetch有两个取值select/join, fetch的作用是在一对多的关系中,是通过多条select语句查询一方(N+1此),还是通过连接查询一次性获得多方数据(1次)
注意:在xml中配置的fetch对程序的HQL语句无效
fetch=join 后懒加载失效(一条语句就全部查询出来了)
- hibernate get/load 懒加载 fetch
- Hibernate深入之get()与load()懒加载
- Hibernate深入之get()与load()懒加载
- hibernate数据加载get/load的区别
- hibernate数据加载get/load的区别
- hibernate--get load延迟加载的问题
- hibernate 延迟加载 load和get方法
- Hibernate数据加载——Session.get/load
- Hibernate数据加载——Session.get/load
- Hibernate数据加载——Session.get()/load()
- Hibernate加载数据时get和load方法的区别
- Hibernate加载数据时get和load方法的区别
- Hibernate数据加载——Session.get/load
- Hibernate数据加载——Session.get/load
- Hibernate数据加载——Session.get/load
- Hibernate两种加载数据的方式get()和load()
- hibernate的两种加载方式get和load
- hibernate加载数据load 和 get 的区别
- 个推的使用方法
- SparseArray源码分析(未完)
- Linux cpuinfo 详解
- 堆和栈的区别
- python正则表达式
- hibernate get/load 懒加载 fetch
- C#中MessageBox的用法
- 工作笔记先-xw-server
- Laravel 曲谱 - 1.2 安装 - c) 创建 Vagrant Box
- opencv 基本数据结构
- 当我们选择工作时,什么最重要?
- const总结
- 数据结构--二分法查找(内含 ? super T的使用分析)
- 关于前端开发的20篇文档与指南