延迟加载是罪魁祸首所谓成也萧何败也萧何
我有时发现查询速度很慢检查才发现是我没有启用延迟加载造成递归的数据都被加载进来了
我如果加上了延迟加载那么许多页面将无法使用必须在程序里进行代码级别的递归的延迟加载数据的读取
这里面涉及到的策略太麻烦了
对于关联少层次低的用着没问题一旦层次太多了我宁可放弃面向对象改用单纯的一个表一个对象的策略都保存字段就行了
需要别的关联的数据我宁可再次读取毕竟有缓沖速度影响不是很大的而且单表的缓沖性能绝对好
还有对于 opensessioninview 这个东西感觉上可以解决这个问题但实际上为了这是为了解决延迟加载而做出的一个愚蠢的决策
对于使用量很小的没啥可讨论的怎么做都没关系对于使用量大的
对于小数据量我宁可让其非延迟加载这样可以尽快的释放数据库资源特别是一些锁
对于大数据量我想我们需要一个专门的类来保存操作结果让其只返回我们需要的东西而不是用什么延迟加载比如我们一个订单查询只用到了客户的名字我们完全没有必要延迟加载客户的其它信息
不同的需求不同的技术hibernate之类的ORM带给我们很多的方便但我们千万不要认为其是万金油在影响性能的关键地方别忘了我们最基本的数据库操作