【问题标题】:ObjectBox - query on nested relationshipObjectBox - 查询嵌套关系
【发布时间】:2020-01-25 19:22:28
【问题描述】:

我有以下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;
    }
}

我正在尝试搜索并带回所有包含给定 UserEntity 的 MultiplayerGameEntity

在 SQL 术语中(因为这就是我的大脑的工作方式)我会是 JOINing 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)

是否有可能做我正在做的事情,或者我需要以某种方式破解它?

【问题讨论】:

    标签: java relationship objectbox


    【解决方案1】:

    我想我已经让它工作了,通过将链接链接在一起,所以第二个链接是前一个链接的结果(实际上是一个 diff QueryBuilder)

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

    【讨论】:

    • 是的,应该就是这样!为了完成解释:原始代码不起作用,因为 userEntity 关系不能直接从 MultiplayerGameEntity_ 实体信息访问。使用QueryBuilder.link(relationInfo)返回一个QueryBuilder,可以访问目标实体信息relationInfo指向的关系。
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2018-08-04
    • 2020-04-14
    • 2018-10-23
    • 2018-12-01
    相关资源
    最近更新 更多