2013-11-03 59 views
0

我有1:n的關係在表中:如何有效地解析模型對象中的一對多關係?

表A ID,名稱FOO,酒吧

表B ID,X,Y,Z,ID_A

在我的域模型中的每個表A的行是對象並且包含B的集合。

我該如何解析?

我可以先對A進行查詢,然後在解析循環中爲每一行做一個查詢B.但這看起來效率不高。

我也嘗試了連接查詢,但是這爲B的每個條目添加了一個新行,然後我無法將這些行中的每一個映射到1個模型對象。

是否有一個查詢可以將多餘的連接行「減少」爲一個聚合結果?

看起來像關係數據庫的標準情況,但我找不到關於它的信息。

謝謝。

+0

你需要什麼代碼?這是一個概念問題,我沒有任何代碼。 – Ixx

回答

1

在嵌入式數據庫,如SQLite的,沒有客戶端/服務器通信的開銷,所以它實際上是可行的執行很多小的查詢是這樣的:

SELECT id, x, y, z FROM TableB WHERE id_A = ? 

如果你真的想用對於所有的B子對象的加載單個查詢,你可以使用單獨的查詢是這樣的:

SELECT id, name, foo, bar FROM TableA ORDER BY id; 
SELECT id_A, id, x, y, z FROM TableB ORDER BY id_A; 

你會再經過兩個C步驟並行,並且對於每個A記錄,收集具有相同ID的所有B記錄;在ORDER BY子句確保你看到他們在正確的順序:

cursorA = db.query(...); 
cursorB = db.query(...); 
cursorB.moveToFirst(); 
while (cursorA.moveToNext()) { 
    id = cursor.getInt(0); 
    a = new ObjectA(id, ...); 
    while (!cursorB.isAfterLast() && 
      cursorB.getInt(0) == id) { 
     b = new ObjectB(...); 
     a.addB(b); 
     cursorB.moveToNext(); 
    } 
} 

請注意,這是不太可能有太大的比做各設置一個單獨的查詢更有效,因爲排序上id_A列的所有記錄並不比在同一列上進行多次查找更有效。 (但是,如果沒有該列的索引,查找將比排序慢得多。)