2017-05-09 49 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