ObjectBox(Java):对关系的属性查询不';行不通

ObjectBox(Java):对关系的属性查询不';行不通,java,android,objectbox,Java,Android,Objectbox,我的Android应用程序中的ObjectBox出现问题。除了这个问题,一切都正常,所以我知道我的实体类是可以的 它是一种可以对多个商店进行盘点的库存。每个InventoryItem都是在盘点时扫描的产品。盘点结束时,根据框中的数据生成一个或多个文本文件 每个商店都会生成一个文件,因此我有以下代码来查找哪些不同的商店进行了清点: Box<InventoryItem> box = app.getBoxStore().boxFor(InventoryItem.class); long[]

我的Android应用程序中的ObjectBox出现问题。除了这个问题,一切都正常,所以我知道我的实体类是可以的

它是一种可以对多个商店进行盘点的库存。每个
InventoryItem
都是在盘点时扫描的产品。盘点结束时,根据框中的数据生成一个或多个文本文件

每个商店都会生成一个文件,因此我有以下代码来查找哪些不同的商店进行了清点:

Box<InventoryItem> box = app.getBoxStore().boxFor(InventoryItem.class);
long[] shopIds = box.query()
                    .build()
                    .property(InventoryItem_.shopId)
                    .distinct()
                    .findLongs();
我还尝试在查询中使用
.property(InventoryItem\uuuu.shop.targetIdProperty)
,但它给出了完全相同的错误。我找不到其他方法来做这件事,也找不到修复代码的方法

我正在使用AndroidX(这并不重要),我的项目已经正确地设置好了。 MinSdk为19,MaxSdk为28,targetSdk为28。 ObjectBox版本为2.2.0。 在运行Android 7.1.1的设备上调试

这些是相关实体:

@Entity
public class InventoryItem
{
    @Id
    public long id;

    public String operator;

    public ToOne<Area> area;
    public long areaId; // expose relationship target ID

    public ToOne<Product> product;
    public long productId; // expose relationship target ID

    public ToOne<Shop> shop;
    public long shopId; // expose relationship target ID

    public Date timestamp;

    // ...
}

@Entity
public class Shop
{
    @Id(assignable=true)
    public long id;

    @Index @Unique
    public String name;

    @Backlink
    public ToMany<InventoryItem> inventoryItems;

    // ...
}
@实体
公共类清单项
{
@身份证
公共长id;
公共字符串运算符;
公共区域;
public long areaId;//公开关系目标ID
公共卡通产品;
public long productId;//公开关系目标ID
公共图恩商店;
public long shopId;//公开关系目标ID
公共日期时间戳;
// ...
}
@实体
公营商店
{
@Id(可分配=真)
公共长id;
@索引@Unique
公共字符串名称;
@反向链接
公共物品清单;
// ...
}

在ObjectBox的GitHub中寻找了很多答案,在这里,我提出了一个解决方案,基于:

List items=box.getAll();
ArrayList shops=新的ArrayList();
用于(库存项目:项目)
{
Shop-Shop=item.Shop.getTarget();
如果(!shops.contains(shop))
商店。添加(商店);
}
因此,我们只需找到所有内容,然后遍历列表,在
ArrayList
中获得不同的对象(或者我可以将Id放入
long[]
)。只需要几行代码

仍然,我认为ObjtBox实现中有一个bug,因为它返回了一个关系而不是一个长属性上的属性。我要开始讨论一个问题

@Entity
public class InventoryItem
{
    @Id
    public long id;

    public String operator;

    public ToOne<Area> area;
    public long areaId; // expose relationship target ID

    public ToOne<Product> product;
    public long productId; // expose relationship target ID

    public ToOne<Shop> shop;
    public long shopId; // expose relationship target ID

    public Date timestamp;

    // ...
}

@Entity
public class Shop
{
    @Id(assignable=true)
    public long id;

    @Index @Unique
    public String name;

    @Backlink
    public ToMany<InventoryItem> inventoryItems;

    // ...
}
List<InventoryItem> items = box.getAll();
ArrayList<Shop> shops = new ArrayList<>();
for (InventoryItem item : items)
{
    Shop shop = item.shop.getTarget();
    if (!shops.contains(shop))
        shops.add(shop);
}