领域java查询条件

use*_*767 5 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

我尝试使用隐式AND:

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

然后我阅读了文档并分别评估了两个equalTo()条件,这意味着我将:

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

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

gre*_*rvr 1

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

class Dog extends RealmObject {
       @PrimaryKey
       private int id;
       private String color;
       private String name;
}
Run Code Online (Sandbox Code Playgroud)

那么找到拥有一只名为 Fluffy 的棕色狗的用户的第一步就是找到这种狗的主键。因此,我们进行查询以找到精确的Dog

Dog dog = realm.where(Dog.class).equalTo("color", "brown").equalTo("name", "Fluffy").findFirst();
Run Code Online (Sandbox Code Playgroud)

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

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