hibernate—延迟加载

来源:互联网 发布:java http文件服务器 编辑:程序博客网 时间:2024/04/29 14:40

工作也有一段时间了,感觉过去的时间里学到了很多东西,又感觉没什么实质性的作用,开发速度再快,完成的再好也不会因此而跟你升职加薪什么的,最多也就是赢得大家的认可。这也是印证了公司技术总监的那句话,工作中只是教你如何将一些技术用的熟练通透,其他的东西还是得靠自己自学,好了,今天就谈一下hibernate延迟加载的实现问题。

其实很多人面试的时候公司都会问你hibernate是怎样实现延迟加载的问题。或者是hibernate2和hibernate3是如何实现的;又或者是hibernate2通过实体对象和集合实现的原理是什么。其实不需要看源码,查阅一下资料就可以得到hibernate实现延迟加载主要是一下三种:

(1)当Session上的load()方法加载一个实体时,会采用延迟加载。

(2)当Session加载某个实体时,会对这个实体的集合属性值采用延迟加载。

(3)当Session加载某个实体时,会对这个实体所单端关联的另一个实体对象采用延迟加载。

Session的load()方法对实体的加载默认采用延迟记载,而get()方法默认的是采用立即加载,如果访问对象标识符属性。它就没有必要初始化代理。

延迟加载确实会给程序的查询效率带来好处,但是有时明确知道数据需要立即加载时,如果Hibernate先默认的使用延迟加载,而后又必须去数据库加载,反而会降低效率,所以,需要根据应用程序的实际情况来灵活的控制是否使用延迟加载,在Hibernate中只需要修改响应的配置来启用或者关闭延迟加载功能:

(1)在记载单个实体,如果不需要延迟记载,就可以使用Session的get()方法。

(2)当Session加载某个实体时,不需要对这个实体中的集合属性延迟加载,而是要立即加载,这个时候可以配置注解lazy=false。

(3)当Session加载某个实体时,不需要对这个实体所单端关联的另一个实体对象延迟记载,也可以添加属性lazy=false。



以上差不多就是我所知道的,此博客只做记录功能,方便后期回忆,也为后期学习别的做基础。当然不喜勿喷,有错误麻烦留言指正,我会根据实际情况及时更改。谢谢大家。

1 0
原创粉丝点击