1

我最近遇到了GAE无法在单个事务中处理多个实体组的问题。 Java伪代码如下:Google AppEngine:了解数据存储事务

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吗?


更新:试图XG交易时(见下面的回答)与本地开发GAE服务器记住以下内容添加到虚拟机执行命令(否则将无法正常工作):

-Ddatastore.default_high_rep_job_policy_unapplied_job_pct=20 

回答

1
+0

根据谷歌的文档“实体组关系告诉App Engine的几个实体存储在分布式NE的同一部分twork”。所以,你的建议虽然非常简单,但会是可扩展性杀​​手... – faraway

+0

Yess,我正在编辑我的答案,并已添加更好的建议,但所花的时间比我想象的要长,因为我不确定关于一些细节。 – bigblind

+0

我想我发现了更好的溶剂:p – bigblind

相关问题