greenDao模仿加入

时间:2014-04-21 09:41:10

标签: android join greendao

我有两个实体:"订单"和" WorkPosition"。工作位置通过订单的ID相关联,这意味着我在这里有一个toMany-Relationship。一个订单有" n"工作位置和一个工作位置始终是order_id。所以有一个函数:order.getWorkPositions()。

我现在在做什么: Rightnow我正在查询所有订单,然后我正在遍历订单。如果订单的工作位置具有workposition.type =" 1"。

问题是这很慢,因为我至少有1000个订单甚至更多的工作位置。

问题: 我看到"加入"功能不起作用,但在greenDao主页上,我看到了以下查询:

Query query = userDao.queryBuilder().where(
new StringCondition("_ID IN " +
"(SELECT USER_ID FROM USER_MESSAGE WHERE READ_FLAG = 0)").build();

如何使用它来加速查询?我可以从查询中获得作为返回类型的订单吗?或者我可以只有一个ID列表吗?

作为一个查询我想要这样的东西:

Query<Orders> query = getDAOSession().getOrdersDao().queryBuilder()
.where(new StringCondition("?_ID IN? "+ 
"(SELECT * FROM Orders AS O JOIN WorkPosition AS W WHERE w.type=1)")).build();
List<Orders> orders = query.list();

我希望你能理解我的问题,如果不告诉我,我会尽力改进它!:)

2 个答案:

答案 0 :(得分:1)

根据我的经验,我通常使用连接语句的原始查询。只有Ormlite支持部分连接,但它非常简单,并且在所有情况下都不适用于我。我的命题 - 使用原始查询和游标

答案 1 :(得分:0)

greendao-api不支持&#34; join&#34; -function。这意味着您无法使用Property的等同命名函数来构建连接。

但只要SQLite支持,您就可以构建所需的每个WhereCondition。这意味着如果正确加入,您的查询将起作用。 (我注意到你没有指定&#34; ON&#34; -statement)。