【发布时间】:2013-09-03 13:28:50
【问题描述】:
我正在使用 Objectify 4 中的事务来更新 Kind_A 的一堆实体。这些有一些我想在事务中修改的字段,还有一些对其他实体的引用,例如
class Kind_A {
@Id Long id;
@Parent
@Load
Ref<Kind_P> parent;
String name;
@Load
Ref<Kind_B> b;
}
我这里的实体组是由 Kind_P 的一个实例定义的,它会有自己的Refs,例如:
class Kind_P {
@Id Long id;
@Load
Ref<Kind_Q> q;
}
在我的事务中,我将使用祖先查询将ofy().load() 多个实体作为列表,如下所示:
ofy().load().type(Kind_A.class).ancestor(p).list();
然后我将迭代列表,修改例如 name 字段(不是 Ref<>s),然后是 ofy().save() 列表。
我load() 的所有实体都应该具有相同的@Parent (p),因为它是祖先查询。
因此,从表面上看,当我 load() 和 save() 我的 Kind_A 实体时,我正在处理单个实体组 (p)。
但是,我收到了IllegalArgumentException: operating on too many entity groups in a single transaction。我猜这是因为 Objectify 正在加载对象图,包括所有 Kind_Bs 和 Kind_Qs。
这是正确的吗?因此,事务的范围突然扩展到远远超出p 定义的实体组。
如果是这样,有没有办法告诉 Objectify 忽略事务中的 @Load 注释?
有没有办法(比如在 Eclipse 调试器中)我可以找出参与事务的实体?
任何见解将不胜感激!
【问题讨论】:
-
更新:删除
@Parent上的@Load注释似乎可以解决问题,但我想知道这是意料之中还是巧合。跨度>
标签: java google-app-engine objectify