我正在尝试选择实体 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/