2017-05-09 46 views
1

我想從子表訪問父表中的字段。Realm數據庫中的雙向鏈接

public class Product extends RealmObject { 

    @SerializedName("location") 
    private String locationInStore; 

    @SerializedName("tags") 
    private RealmList<Tag> productTags; 
} 

public class Tag extends RealmObject { 

    @PrimaryKey 
    private String name; 
    } 
} 

現在我來搜索變量表名稱,然後我必須表明已符合該標籤的搜索和位置的名稱。

RealmResults<Tag> name = mRealm.where(Tag.class).contains("name", tag, Case.INSENSITIVE).findAll(); 

但是,這給了我唯一的標籤名稱,我怎樣才能訪問它的位置和其他屬性。

我也試過

List<RealmResults<Product>> results = new ArrayList<>(); 

results.add(mRealm.where(Product.class).contains("productTags.name", tag, Case.INSENSITIVE).findAll()); 

上面的查詢返回我的產品對象,但該產品的對象包含標籤陣列不是已經符合搜索的一個。

在此先感謝

+0

'名單>結果= new ArrayList <>();'爲什麼? – EpicPandaForce

+0

@EpicPandaForce因爲我的完整查詢是 results.add(mRealm.where(Product.class).equalTo(「productTags.name」,tag,Case.INSENSITIVE).findAll ());(「productTags.name」,tag,Case.INSENSITIVE).notEqualTo(「productTags.name」,標記,Case.INSENSITIVE).findAll())結果.add(mRealm.where(Product.class).beginsWith ; (「productTags.name」,tag,Case.INSENSITIVE).not()。startsWith(「productTags.name」,tag,Case.INSENSITIVE).notEqualTo(mRealm.where(Product.class).contains 「productTags.name」,tag,Case.INSENSITIVE).findAll()); – swati

+0

你的問題讓我困惑。您有產品* - > 1標籤。這意味着任何產品及其位置都可能與多個標籤關聯。無論你做什麼,當你選擇一個產品時,它都可能與具有多個不同名稱的標籤相關聯。您顯示的查詢將返回至少有一個標籤的所有產品,其標籤名稱無論是「標籤」。它是匹配搜索的那個。它似乎很可能與其他標籤相關聯,並且這些標籤將具有不同的名稱。 –

回答

0

主要的想法,爲什麼不陣列的一個已經沒有匹配的搜索,是Case.INSENSITIVE搜索。要小心使用,是因爲功能有侷限性:

排序和不區分大小寫字符串中查詢的拉丁補充「,「拉丁語擴展A」,「拉丁語擴展匹配僅支持字符集的拉丁基本」, B'(UTF-8範圍0-591)。此外,排序工作的目的是使資本和非大寫字母排序,而不像標準庫所做的那樣。這意味着,' - !'#0 &()*,。/:;?_ + < => 123aAbBcCxXyYzZ是Realm中的實際排序順序,另外,在使用equalTo()時不設置區分大小寫標誌,notEqualTo (),包括()的endsWith(),beginsWith()或類似()將只從英語語言環境的字符工作。

瞭解更多關於這些限制here