领域java查询条件

时间:2015-09-23 07:53:44

标签: java realm

假设下一个情况:

//I don't put the getters and setters, but assume they are there
public class User extends RealmObject {
    private RealmList<Dog> dogs;
}

public class Dog extends RealmObject {
    //UPDATE: I've added the variable city, to make my question more exact
    private String city;
    private String color;
    private String name;
}

假设: 人1有狗:NY-white-Joe 人2有狗:NY-brown-Mary,SF-white-Fluffy,LA-brown-Fluffy 人3有狗:NY-brown-Fluffy,LA-white-Pepito

问题:如何查询所有有棕色狗叫蓬松的人?

我尝试使用隐式AND:

RealmQuery<User> userQuery = realm.where(User.class).equalTo("dogs.color", "brown").equalTo("dogs.name", "Fluffy");

然后我已经阅读了文档,并且两个equalTo()条件被单独评估,这意味着我将拥有:

所有拥有棕色狗和狗的用户称为Fluffy。 (所以结果是P2,P3)。

我应该如何编写此查询以将条件应用于同一条狗?

2 个答案:

答案 0 :(得分:1)

在我看来,最好的方法是使用主键查询。我的意思是首先将主键添加到Dog类:

class Dog extends RealmObject {
       @PrimaryKey
       private int id;
       private String color;
       private String name;
}

然后第一步找到有一只名叫Fluffy的棕色狗的用户,就是找到这种狗的主键。因此,我们进行查询以找到确切的Dog

Dog dog = realm.where(Dog.class).equalTo("color", "brown").equalTo("name", "Fluffy").findFirst();

之后我们正在搜索具有已定义主键(id字段)的狗的用户:

RealmResults<User> users = realm.where(User.class).equalTo("dogs.id", dog.getId()).findAll();

答案 1 :(得分:1)

Realm中的链接查询是存在量词(https://en.wikipedia.org/wiki/Existential_quantification)。这意味着如果子类中只有一个对象满足条件,则父类中的对象将添加到RealmResults

Link query example展示了存在量词的运作方式。目前,您必须迭代User并单独查询Dogs列表。

反向查找有一个开放的issue