android - 在 greenDao 2.1.0 中加入两个以上的关系

标签 android join greendao

我正在尝试选择实体 A,同时通过实体 B 加入实体 C 中的属性来限制它们:

A {_id} <-- B {_id, A_id, C_id} --> C {_id, xy}

到目前为止,这是我的代码:

QueryBuilder<A> queryA = aDao.queryBuilder();
Join<A,B> joinAB = queryA.join(B.class, BDao.Properties.A_Id);

queryA.join(joinAB, BDao.Properties.C_id, C.class, CDao.Properties.Id)
            .where(CDao.Properties.xy.eq("stuff"))

在最后一行中,编译器期望一个 Join<?,A>而不是 Join<A,B>而且我不确定我应该如何链接这两个连接才能使其工作。

如果我从对 B 的查询开始,我可以只连接到 C 并分配限制,但是我只会从那里加载 B 和延迟加载 A,这不是很好,或者深度加载 B还引入了 C,这也不是很好。

从文档中我得到的印象是这种连接链是可能的,但我不确定我的错误在哪里。

最佳答案

如果我正确理解了你试图实现的目标,那么你所做的是正确的,但你不需要指定 <A,B>在创建您的加入时。 这应该有效:

QueryBuilder<A> queryA = aDao.queryBuilder();
Join joinAB = queryA.join(B.class, BDao.Properties.A_Id);
Join joinBC = queryA.join(joinAB, BDao.Properties.C_Id, C.class, CDAo.Properties.Id);
joinBC.where(CDao.Properties.xy.eq("stuff");
List<A> listA = queryA.list();

关于android - 在 greenDao 2.1.0 中加入两个以上的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34266849/

相关文章:

java - 在 Oreo 及更高版本中使用 WorkManager 时是否应该显示持续通知?

android - 使用Picasso加载图片时出现错误504

android - AdvertisingIdClient.Info.getId() 在同一应用程序的重复安装中是否返回静态 ID?

apache-spark - 如何确保由 Spark DataFrame join 引起的分区?

python - 如何通过 id 连接两个模型(没有外键)并按管理中的链接模型字段排序

android - GreenDao 支持对多列的唯一约束

android - GreenDAO 支持表之间的多种关系

java - 如何从 Java 进行同步\异步 native 调用

MySQL 对重复的多个列产生不同的结果

android - 如何在 Green-DAO 中使用 LoaderManager