加入greenDao 2.1.0中的两个关系

时间:2015-12-14 12:16:29

标签: 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>,我不确定我应该如何链接两个连接以使其工作。

如果我从BI开始查询可以只是将连接转换为C并分配限制,但是那时我只从那里加载B和延迟加载A,这不是很好,或者是深度加载B也拉C,这也不是很好。

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

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您尝试实现的目标,那么您所做的是正确的,但在创建联接时无需指定<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();