GAE:是否需要使用事务作为参数调用put和gets in cross group transaction(XG)?

时间:2013-12-16 23:35:26

标签: java google-app-engine transactions google-cloud-datastore

我刚刚注意到XG事务的docs' example使用包含事务作为参数的put方法,但没有提到以这种方式执行它的必要性。

TransactionOptions options = TransactionOptions.Builder.withXG(true);
Transaction txn = datastore.beginTransaction(options);

Entity a = new Entity("A");
a.setProperty("a", 22);
datastore.put(txn, a);

Entity b = new Entity("B");
b.setProperty("b", 11);
datastore.put(txn, b);

txn.commit();

根据API,单个参数put(和get)使用事务:

  

如果有当前事务,则此操作将在其中执行   该交易

我关心的是XG交易。如果我只是在那个例子中使用两个实体的单个参数(我有很多这样的代码),它们是否仍然在XG事务中执行?

1 个答案:

答案 0 :(得分:1)

是的,他们都将在XG交易中执行。

如果您未明确指定交易,则将使用最近创建的交易。 DatastoreService存储使用beginTransaction创建的一堆事务,并在没有显式事务的情况下执行puts时使用顶层事务。它不会以任何不同的方式处理您的XG事务,它只会将其从堆栈中拉出并使用它。