繁体   English   中英

Google AppEngine:了解数据存储区交易

[英]Google AppEngine: understanding datastore transactions

最近,我遇到了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();  
}  

目的是在记录存在的情况下更新客户数据,否则创建记录。 我最后遇到一个异常,抱怨事务中有多个实体组。 由于这些实体属于不同的实体组,因此不允许在一次交易中查找/更新2个不同的客户。
所以这是我的(一般)问题:
假设我有一个银行应用程序,其帐户实体具有余额字段。 我想在一次交易中将资金从一个帐户转移到另一个帐户,以确保在转移期间没有人同时更新两个帐户的余额,并且在转移失败的情况下,我需要回滚所有内容。 GAE甚至可能出现上述情况吗?


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

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM