2011-09-22 48 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),是否有辦法做到這一點,而不需要耗費大量的時間連續查詢一個接一個?

回答