Hibernate基本特性三 -- 延迟加载机制
2015-12-25 19:51
253 查看
Hibernate基本特性之延迟加载机制
Hibernate在使用时,有些API操作是具有延迟加载机制的。
延迟加载机制特点:
当通过Hibernate的API获取一个对象结果后,该对象并没有数据库数据,当通过对象的getter方法获取属性值时才去数据库查询加载。
a.具有延迟加载机制的操作如下:
--session.load 查询
--query.iterator 查询
--获取关联对象的属性信息
*b.常犯错误:
LazyInitalizationException:could not initialize proxy - no Session
--代码中使用了延迟加载操作,但是session在加载数据前关闭了。
c.延迟加载原理
在使用延迟加载操作后,Hibernate返回的对象是Hibernate利用CGLIB技术新生成的一个类型。在新类型中,将属性的 getter方法重写。新生成类是原实体类的子类。
*d.session 的get和load方法的区别:
--两者都是按主键作条件查询。
--get是立刻加载;load是延迟加载。
--get返回的对象类型是实体类型;load返回的是动态生成的代理类,该代理类是实体类的子类。
--get未查到数据返回null;load未查到数据抛出ObjectNotFoundException异常。
e.延迟加载机制好处
--提高了内存的使用效率。
--可以降低数据访问并发量。
Hibernate在使用时,有些API操作是具有延迟加载机制的。
延迟加载机制特点:
当通过Hibernate的API获取一个对象结果后,该对象并没有数据库数据,当通过对象的getter方法获取属性值时才去数据库查询加载。
a.具有延迟加载机制的操作如下:
--session.load 查询
--query.iterator 查询
--获取关联对象的属性信息
*b.常犯错误:
LazyInitalizationException:could not initialize proxy - no Session
--代码中使用了延迟加载操作,但是session在加载数据前关闭了。
c.延迟加载原理
在使用延迟加载操作后,Hibernate返回的对象是Hibernate利用CGLIB技术新生成的一个类型。在新类型中,将属性的 getter方法重写。新生成类是原实体类的子类。
public class Foo$$EnhancerByCGLIB extends Foo{ public String getName(){ //判断是否已加载过数据 //如果加载过,返回name值 //如果未加载,发送SQL查询加载数据,然后返回name值 } }
*d.session 的get和load方法的区别:
--两者都是按主键作条件查询。
--get是立刻加载;load是延迟加载。
--get返回的对象类型是实体类型;load返回的是动态生成的代理类,该代理类是实体类的子类。
--get未查到数据返回null;load未查到数据抛出ObjectNotFoundException异常。
e.延迟加载机制好处
--提高了内存的使用效率。
--可以降低数据访问并发量。
相关文章推荐
- Codeforces 607B:Zuma DP
- LeetCode 7 Reverse Integer(反转数字)
- 本地同步github代码
- factor--符号矩阵的因式分解
- OpenCV在Visual Studio中的属性表配置方法(通用)
- Leetcode208: Largest Rectangle in Histogram
- 四 数据连接过程解析
- ural 1071. Nikifor 2
- sym--数值矩阵转为符号矩阵
- USACO1.1 Friday the Thirteenth 比较分析
- Atitit.python web环境的配置 attilax 总结
- ural 1070. Local Time
- Atitit.python web环境的配置 attilax 总结
- Atitit.python web环境的配置 attilax 总结
- CAS操作
- rat/rats--用有理数形式表示矩阵
- 三、RIL-JAVA的解析
- SQL视图查询详解
- android实战之 视觉差侧滑菜单简单版+Activity视觉差动画
- rcond--矩阵可逆的条件数估值