簡體   English   中英

如何有效解析模型對象中的一對多關系?

[英]How do I parse efficiently one to many relation in model objects?

我在表中有1:n關系:

表A的ID,名稱,foo,bar

表B id,x,y,z,id_A

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

我該如何解析?

我可以先查詢A,然后在解析循環中為每一行查詢B。但這看起來效率不高。

我也嘗試了聯接查詢,但是這為B的每個條目添加了一個新行,然后我無法將這些行中的每一個映射到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;

然后,您將並行瀏覽兩個游標,並為每個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();
    }
}

請注意,與對每個A進行單獨查詢相比,這可能沒有效率更高,因為對id_A列上的所有記錄進行排序並不比對同一列上的許多查詢有效。 (但是,在該列上沒有索引,查找將比排序慢得多。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM