Hibernate的延迟加载,一个锋利的两面刀

来源:互联网 发布:半圆的周长有几种算法 编辑:程序博客网 时间:2024/04/29 12:01

延迟加载是罪魁祸首,所谓“成也萧何,败也萧何”。

我有时发现查询速度很慢,检查才发现是我没有启用延迟加载,造成递归的数据都被加载进来了。

我如果加上了延迟加载,那么许多页面将无法使用,必须在程序里进行代码级别的递归的延迟加载数据的读取。

这里面涉及到的策略太麻烦了。

对于关联少,层次低的,用着没问题,一旦层次太多了,我宁可放弃面向对象,改用单纯的一个表,一个对象的策略,都保存字段就行了。

需要别的关联的数据,我宁可再次读取,毕竟有缓冲,速度影响不是很大的。而且单表的缓冲,性能绝对好。

 

还有对于 opensessioninview 这个东西,感觉上可以解决这个问题,但实际上,为了这是为了解决延迟加载而做出的一个愚蠢的决策。

 

对于使用量很小的,没啥可讨论的,怎么做都没关系,对于使用量大的

 

1 对于小数据量,我宁可让其非延迟加载,这样可以尽快的释放数据库资源,特别是一些锁。

2 对于大数据量,我想我们需要一个专门的类来保存操作结果,让其只返回我们需要的东西,而不是用什么延迟加载。比如我们一个订单查询,只用到了客户的名字,我们完全没有必要延迟加载客户的其它信息。

 

 

不同的需求,不同的技术,hibernate之类的ORM带给我们很多的方便,但我们千万不要认为其是”万金油“,在影响性能的关键地方,别忘了我们最基本的数据库操作。