java - 谷歌应用引擎 : understanding datastore transactions

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

我最近遇到了这一恼人的问题,GAE 无法在单个事务中处理多个实体组。 Java伪代码如下:

public void doit(EntityManager em, long id)
{
  Customer c = null;

  em.getTransaction().begin();

  if (id != 0)
    c = em.find(Customer.class, id);

  boolean create = (c == null);

  if (create)
    c = new Customer();

  c.setName("John Doe");

  if (create)
    em.persist(c);

  em.getTransaction().commit();  
}  

目的是如果记录存在则更新客户数据,否则创建它。我最终遇到了一个异常(exception),提示事务中有多个实体组。它不允许在一笔交易中查找/更新 2 个不同的客户,因为这些实体属于不同的实体组。
这是我的(一般)问题:
假设我有一个银行应用程序,其中帐户实体具有余额字段。我想在一笔交易中将钱从一个帐户转移到另一个帐户,当然是为了确保在转移过程中没有人更新两个帐户余额,并且如果转移失败,我需要回滚所有内容。上述场景是否可以通过 GAE 实现?

<小时/>

更新:当尝试使用本地开发 GAE 服务器进行 XG 事务(参见下面的答案)时,请记住将以下内容添加到 VM 执行命令中(否则它将无法工作):

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

最佳答案

关于java - 谷歌应用引擎 : understanding datastore transactions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700479/

相关文章:

java - android 获取命令的stderr

Java JTable 展开折叠行为

java - 如何让google app engine的开发servlet找到RestApiServlet?

android - 谷歌云端点应该使用哪个网络库

java - 有没有办法自动更新jpa中的实体类?

java - 为什么我会获得与 JPA 共享的 Id?

java - 在迭代期间向集合中添加元素

java - Choco 2 中 RealVariables 的使用或约束

python - 当网站部署在 Google 应用引擎上时 TemplateNotFound : templates/HomePage. html 错误,但网站在本地主机中运行时运行正常

java - JPA 实体管理器外观