IllegalArgumentException:拆分提供的查询需要在内存中合并太多子查询

Pol*_*oly 3 java google-app-engine

我查找了一堆模型 ID:

List<Long> ids = lookupIds(searchCriteria);
Run Code Online (Sandbox Code Playgroud)

然后我运行一个查询来订购它们:

fooModelList = (List<FooModel>) query.execute(ids);
Run Code Online (Sandbox Code Playgroud)

日志显示这是编译为的 GQL:

Compiling "SELECT FROM com.foo.FooModel WHERE 
:p.contains(id) ORDER BY createdDateTime desc RANGE 0,10"
Run Code Online (Sandbox Code Playgroud)

idsArrayList 很小时,这可以正常工作。

但超过一定大小(也许是 40?)我收到此错误:

IllegalArgumentException: Splitting the provided query requires 
that too many subqueries are merged in memory.
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,或者这是 GAE 中的固定限制?

Nic*_*son 5

这是一个固定的限制。但是,如果您要按 ID 查找实体,那么您首先不应该执行查询 - 您应该按键进行提取。如果您通过外键进行查询,并且想要超过 40 个限制,则需要自己执行单独的查询 - 但您可能应该重新考虑您的设计,因为这是极其低效的。