java - Google App Engine 数据存储区 api 接受事务作为参数

标签 java google-app-engine

数据存储有时具有接受事务作为参数的方法。例如,有datastore.get(key),同时还有datastore.get(transaction, key)Documentation这里说后一个版本“在提供的事务中执行”。

但是如果我用这样的交易,好像就不需要传入交易了。

Transaction tx = datastore.beginTransaction();

Entity tom = datastore.get(key); //no need to pass in a transaction

tom.setProperty("age", 40);

datastore.put(tom);

tx.commit();

我应该如何以及何时使用datastore.get(transaction, key)? 提前致谢!

最佳答案

好吧,事实证明答案就在我读过的同一个文档中......

Here解释了 get(key) 及其重载 get(transaction, key) 之间的区别。

DatastoreService 提供对无模式数据存储系统的同步访问。该系统中数据的基本单位是实体,它具有不可变的身份(由 key 表示)和零个或多个可变属性。实体对象可以通过标识符创建、更新、删除、检索,并通过属性组合进行查询。 DatastoreService 可以以事务方式使用并支持“当前”事务的概念。当前事务是通过调用 beginTransaction() 建立的。当尝试提交或回滚或再次调用 beginTransaction() 时,此方法返回的事务将不再是当前事务。事务只能在创建它的线程中处于当前状态。

put、get、delete 的各种重载均支持事务。此类的用户可以选择将事务(可能为空)显式传递给这些方法或依赖于 ImplicitTransactionManagementPolicy 控制的行为。如果用户显式提供事务,则由用户在适当的时间调用 Transaction.commit() 或 Transaction.rollback() 。如果用户依赖隐式事务管理并且安装的策略创建了一个事务,则该事务将在操作返回给用户之前提交(如果成功)或回滚(如果失败)。根据 ImplicitTransactionManagementPolicy 管理事务的方法有:delete(Key...)、delete(Iterable)、get(Key)、get(Iterable)、put(Entity) 和 put(Iterable)。

采用Transaction 参数的prepare 重载的行为与采用Transaction 参数的put、get 和delete 重载相同。但是,与 put、get 和 delete 不同,不采用 Transaction 参数的prepare 重载不会使用现有的 Transaction(如果事务已在运行),也不会查阅 ImplicitTransactionManagementPolicy(如果事务尚未运行)。

关于java - Google App Engine 数据存储区 api 接受事务作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085884/

相关文章:

google-app-engine - Google App Engine Set-Cookie 无法使用我的到期日期

google-app-engine - 使用 DataNucleus 的列表排序扩展会导致空列表

java - FileInputStream 查看 Jar 的根目录

java - 以下查询导致 MySQLSyntaxErrorException - 我的查询有什么问题?

java - Ivy 1.0 XML 文件有 DTD 或 XSD 吗?

java - 将 Spring Controller 与 JSF 结合使用

java - Play 框架 scala 查询绑定(bind) java 类

java - 打印 Java 数组的最简单方法是什么?

python - GAE 中的 StringList 属性

google-app-engine - Google App Engine 路由和路径