Java IllegalArgumentException:拆分提供的查询需要在内存中合并太多子查询
我查找了一组模型ID:Java IllegalArgumentException:拆分提供的查询需要在内存中合并太多子查询,java,google-app-engine,Java,Google App Engine,我查找了一组模型ID: List<Long> ids = lookupIds(searchCriteria); 当idsArrayList很小时,这可以正常工作 但超过一定尺寸(可能是40?)时,我会出现以下错误: IllegalArgumentException: Splitting the provided query requires that too many subqueries are merged in memory. 有没有办法解决这个问题,或者这是GAE中的一
List<Long> ids = lookupIds(searchCriteria);
当ids
ArrayList很小时,这可以正常工作
但超过一定尺寸(可能是40?)时,我会出现以下错误:
IllegalArgumentException: Splitting the provided query requires
that too many subqueries are merged in memory.
有没有办法解决这个问题,或者这是GAE中的一个固定限制?这是一个固定限制。但是,如果您是按ID查找实体,那么首先不应该执行查询,而应该执行按键抓取。如果您使用外键进行查询,如果您想超过40的限制,您需要自己进行单独的查询-但是您可能应该重新考虑您的设计,因为这是非常低效的。我无法使用GAE的文档验证这一点,因此我的答案可能不完整。但是我发现“ORDER BY createdDateTime desc”设置了这个限制,顺便说一下,这个限制是30。我的假设是,如果gae不需要对它进行排序,它就不需要在内存中处理查询 如果您确实需要对其进行“排序”,请执行以下操作(这是GAE中使用定时内容的方式): 向查询中添加一个字段“week”或“month”或其他内容,该字段包含一个唯一分隔周/月的整数(因此您需要0..52或0..11的其他内容,因为它们在多年中也必须是唯一的)。然后,你提出你的问题,并声明你只对本周,甚至上个星期(或上个月)的事情感兴趣。因此,如果我们在第4353周,您的查询类似于“[435352]中的周”。您应该有一个相对较小的查询集。然后过滤掉太旧的帖子,并在内存中进行排序
Compiling "SELECT FROM com.foo.FooModel WHERE
:p.contains(id) ORDER BY createdDateTime desc RANGE 0,10"
IllegalArgumentException: Splitting the provided query requires
that too many subqueries are merged in memory.