2011-09-22 61 views
1

对不起,如果我不太好的措辞,但让我试着解释我在做什么。我有类A的一个主要目的,即具有类B,C d和E从多个表中检索对象数据帮助

多个对象

使得:

Class ObjectA 
{ 
    ObjectB[] myObjectBs; 
    ObjectC[] myObjectCs; 
    ObjectD[] myObjectDs; 
    ObjectE[] myObjectEs; 
} 

其中A ---乙映射是1对多,为B,C,D和E.也就是说,所有B,C,D,E对象只与一个对象A相关联。

我将所有这些对象的数据存储在数据库中, A类实例的所有数据等。

现在,在运行时即时获取数据时,我正在运行5针对每个对象的不同查询。

(非常简化的伪代码)

objectA=sql("select * from tableA where id=#id#"); 
objectA.setObjectBs(sql("select * from tableB where a_id=#id#"); 
objectA.setObjectCs(sql("select * from tableC where a_id=#id#"); 
objectA.setObjectDs(sql("select * from tableD where a_id=#id#"); 
objectA.setObjectEs(sql("select * from tableE where a_id=#id#"); 

如果是有道理的。

现在,我想知道,这是做这件事最有效的方法吗?我觉得应该有一种方法可以在1个查询中获得所有这些信息,但是要做的事情就像“select * from a,b,c,d,e where a.id =#id#and b.a_id =#id#并且c.a_id = #id#和d.a_id = #id#和e.a_id = #id#“将为每个行给出具有A,B,C,D,E的所有列的结果集,并且在那里将会有许多更多的行,我会需要。

如果只有一个对象数组(如ObjectBs),它可以通过简单的连接完成,然后由我的数据库框架处理。如果关系是A(一).... B(很多)和B(一).... C(很多)它可以用两个连接完成并且工作。但对于A(一).... B(许多)和A(一).... C(许多)等我想不出一个好方法来连接或返回这些数据没有太多的行,如果A有10个Bs和10Cs,它将返回100行而不是20个。

所以,我现在是这样做的,有5种不同的选择,最高效的(它看起来像它不),还是有更好的方法呢?另外,如果我要一次抓取一大堆(比如5000个ObjectAs和所有相关的Bs,Cs,Ds和Es),是否有办法做到这一点,而不需要耗费大量的时间连续查询一个接一个?

回答