过多的一对一eager加载引起的性能问题如何解决?

09-10-23 atester
         

在orm(toplink/eclipse link)中,一对一(多对一)关系默认的加载方式是FetchType.EAGER,我有一个User对象,在读取这个User对象的时候,会加载如下:

Department(一个用户隶属于一个部门,多对一)...

ParentDepartment(一个部门有0-N级的上级部门,多对一)...

Company(部门属于公司,多对一)...

Administrator(一个公司对应一个超级管理员)...

加载一个User对象至少就同时加载了上边这些对象,开始的时候用得还很好,因为是EAGER加载,用起来很方便,使我最后Facade出来的向外暴露的会话Bean少了很多方法,但是后来数据量太大以后就发生了性能问题。

我想,我碰到的性能问题的原因就是传说中的ORM滥用引起的吧...

请教banq老师及各位老鸟,如果允分考虑性能问题,是不是要把这些一对一、多对一关系最好统统改为lazy加载?然后再从Facade会话Bean中暴露出一个查询相应的对象的接口?

虚心求教...

         

banq
2009-10-23 15:02

基本是这样。

还有从建模设计是进行改进,对关联只进行高度关联引入,也就是只保留聚合关联,其他一律不用,能不用关联就不用。