我正在尝试选择实体 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,这也不是很好。
从文档中我得到的印象是这种连接链是可能的,但我不确定我的错误在哪里。
答案 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();