我有两个实体:"订单"one_answers"工作岗位"。Workpositions通过订单的id进行关联,这意味着我在这里有一个toMany关系。一个订单有"n"个工作位置,一个工作位置总是有一个order_id。所以有一个函数:order.getWorkPositions().
我现在在做什么:现在我正在查询所有订单,然后我正在迭代订单。如果订单有具有工作位置的工作位置。type="1".
问题是,这是非常缓慢的,因为我有至少1000个订单,甚至更多的工作岗位。
问题:我看到"join"功能不起作用,但在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();
我希望你能理解我的问题,如果不告诉我,我会努力改进!:)
根据我的经验,我通常对联接语句使用原始查询。只有Ormlite支持部分联接,但它非常简单,不适用于所有情况。我的主张-使用原始查询和光标
只有greendao api不支持"join"-函数。这意味着您不能使用Property的同名函数来构建联接。
但是,只要SQLite支持,您就可以构建所需的每个WhereCondition。这意味着,如果您正确加入,您的查询将起作用。(我注意到您并没有指定"ON"语句)。