Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事务中是否遵循Objectify@Load注释?_Java_Google App Engine_Objectify - Fatal编程技术网

Java 事务中是否遵循Objectify@Load注释?

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

我正在使用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().type(Kind_A.class).ancestor(p).list();
然后,我将迭代列表,修改(比如)
name
字段(而不是
Ref
s),然后
ofy().save()
列表

所有实体I
load()
都应该具有相同的
@Parent
p
),因为它是一个祖先查询

因此,从表面上看,当我
load()
save()
my
Kind\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();