Java 事务中是否遵循Objectify@Load注释?
我正在使用Objectify 4中的一个事务来更新一组类型为a的实体。这些实体有许多字段我想在事务中修改,但也有许多对其他实体的引用,例如Java 事务中是否遵循Objectify@Load注释?,java,google-app-engine,objectify,Java,Google App Engine,Objectify,我正在使用Objectify 4中的一个事务来更新一组类型为a的实体。这些实体有许多字段我想在事务中修改,但也有许多对其他实体的引用,例如 class Kind_A { @Id Long id; @Parent @Load Ref<Kind_P> parent; String name; @Load Ref<Kind_B> b; } 在我的事务中,我将使用祖先查询ofy().load()许多实体作为列表,如下所示: ofy().load
class Kind_A {
@Id Long id;
@Parent
@Load
Ref<Kind_P> parent;
String name;
@Load
Ref<Kind_B> b;
}
在我的事务中,我将使用祖先查询ofy().load()
许多实体作为列表,如下所示:
ofy().load().type(Kind_A.class).ancestor(p).list();
然后,我将迭代列表,修改(比如)name
字段(而不是Ref
s),然后ofy().save()
列表
所有实体Iload()
都应该具有相同的@Parent
(p
),因为它是一个祖先查询
因此,从表面上看,当我load()
和save()
myKind\u A
实体时,我处理的是单个实体组(p
)
但是,我遇到了一个IllegalArgumentException:在一个事务中操作过多的实体组
。我猜这是因为Objectify正在加载对象图,包括所有Kind\u B
s和Kind\u Q
s
这是正确的吗?因此,交易范围突然远远超出了p
定义的实体组
如果是这样,有没有办法告诉Objectify忽略事务中的@Load注释
有没有一种方法(比如,在Eclipse调试器中)可以找到参与事务的实体
任何见解都将不胜感激 @Load对事务不敏感-无论您是否有事务,注释都会起作用。您可以通过使用分组来控制@Load的行为,例如@Load(有时.class)或@Load(除非=有时.class) 如果您从@Parent中删除@Load,这就解决了您的问题,那么您的@Parented类中可能有额外的@Load注释,因此您可以过渡地引入更多的实体
谨慎使用@Load。请注意,在Objectify 4.0rc1中,您甚至不需要使用@Load-当您使用Ref.get()时,它将获取引用的实体,即使它没有@Loaded@加载只是一种优化,这样可以有效地获取会话缓存。更新:删除
@Parent
上的@Load
注释似乎可以解决问题,但我想知道这是预期的还是巧合。
ofy().load().type(Kind_A.class).ancestor(p).list();