【发布时间】:2014-04-17 05:13:07
【问题描述】:
我开始使用 Google App Engine,并且正在使用 Objectify。如何在数据存储中创建根实体,但如果它已经存在则错误?我没有找到任何内置的东西(例如DatastoreService.put(),因此ofy().save() 将覆盖现有实体而不是错误)。我习惯的简单技术是在事务中执行此操作:
- 如果已经存在则错误
- 保存
但是,这不是幂等的;如果事务执行两次,它会在步骤 1 中出错。这是迄今为止我想出的最好的,不是在交易中:
- 如果已经存在则错误
- 保存
- 获取
- 如果不是我们刚刚创建的数据,那就错了
或者,如果我不介意两次成功保存相同数据的请求,我可以跳过初始查找:
- 获取
- 如果与我们即将创建的数据相同,则报告成功
- 错误,如果已经存在,但不是我们即将创建的数据
- 保存
这是可行的,但是要完成我认为非常简单的操作会有点笨重。有没有更好的办法?
【问题讨论】:
标签: google-app-engine google-cloud-datastore objectify