ObjectBox - запрос на вложенные отношения - PullRequest
2 голосов
/ 25 января 2020

У меня есть следующие Entity классы

@io.objectbox.annotation.Entity
public class MultiplayerGameEntity extends BaseEntity {

    private int durationInHours;
    private ToMany<MultiplayerPlayerEntity> players;

    public MultiplayerGameEntity() {
    }

    public int getDurationInHours() {
        return durationInHours;
    }

    public void setDurationInHours(int durationInHours) {
        this.durationInHours = durationInHours;
    }

    public ToMany<MultiplayerPlayerEntity> getPlayers() {
        return players;
    }

    public void setPlayers(ToMany<MultiplayerPlayerEntity> players) {
        this.players = players;
    }
}

и

@io.objectbox.annotation.Entity
public class MultiplayerPlayerEntity extends BaseEntity {

    public ToOne<UserEntity> userEntity;
    public ToMany<MultiplayerRoundEntity> rounds;

    public MultiplayerPlayerEntity() {
    }
}

и наконец

@io.objectbox.annotation.Entity
public class UserEntity extends BaseEntity {

    private String uniqueId;
    private String displayName;
    private ToMany<UserEntity> friends;

    public UserEntity() {
    }

    public UserEntity(String uniqueId, String displayName) {
        this.uniqueId = uniqueId;
        this.displayName = displayName;
    }

    public String getUniqueId() {
        return uniqueId;
    }

    public void setUniqueId(String uniqueId) {
        this.uniqueId = uniqueId;
    }

    public String getDisplayName() {
        return displayName;
    }

    public void setDisplayName(String displayName) {
        this.displayName = displayName;
    }

    public ToMany<UserEntity> getFriends() {
        return friends;
    }

    public void setFriends(ToMany<UserEntity> friends) {
        this.friends = friends;
    }
}

Я пытаюсь сделать поиск и принести обратно все MultiplayerGameEntity, которые содержат данные UserEntity

в SQL терминах (поскольку так работает мой мозг), я бы был JOIN ing MultiplayerGameEntity до MultiplayerPlayerEntity, а затем MultiplayerPlayerEntity до UserEntity

Я пытался сделать это, используя link(), но я не могу понять, как связать второе отношение.

код до сих пор .. .

            queryBuilder.link(MultiplayerGameEntity_.players);
            queryBuilder.link(MultiplayerPlayerEntity_.userEntity).equal(UserEntity_.uniqueId, uniqueId);
            return queryBuilder.build().find();
        }

, но это не работает с указанием

java.lang.IllegalArgumentException: Relation not part of Entity MultiplayerPlayerEntity (17)

Возможно ли вообще делать то, что я делаю, или мне нужно взломать это как-то?

1 Ответ

2 голосов
/ 26 января 2020

Я думаю, у меня все получилось, связав вместе цепочку ссылок, чтобы вторая ссылка была на результат предыдущей ссылки (которая на самом деле является diff QueryBuilder)

QueryBuilder<MultiplayerGameEntity> queryBuilder = box.query();
queryBuilder.link(MultiplayerGameEntity_.players).link(MultiplayerPlayerEntity_.userEntity).equal(UserEntity_.uniqueId, uniqueId);
...