2010-07-19 47 views
0

下面是我的方法之一psudo代码:Google App Engine:如何在第二笔交易前“关闭”对象?

1. Get PersistenceManager (pm) 


2. pm.fetchObject1 

3. pm.beginTransaction 

4. pm.modifyObject1 

5. pm.commit 


6. pm.fetchObject2 

7. pm.beginTransaction 

8. pm.modifyObject2 

9. pm.commit 

但是我得到这个错误“不能在 单交易上的多个实体组工作......”

我必须在第5步和第7步之间插入另一条线,说我是 用object1'完成',就像关闭它?

感谢

回答

1

虽然你说什么应该工作,它可能是在appengine bug。同时,您可以执行以下操作(伪代码),或者将实体object1和object2放在同一个实体组中。更多关于交易和实体组here

1. Get PersistenceManager (pm) 

    2. pm.currentTransaction (tx) 

    3. tx.begin 

    4. pm.fetchObject1 

    5. modifyObject1 

    6. tx.commit 

    7. pm.close 


    8. Get PersistenceManager (pm) 

    9. pm.currentTransaction (tx) 

    10. tx.begin 

    11. pm.fetchObject2 

    12. modifyObject2 

    13. tx.commit 

    14. pm.close 

有更多的讨论here

+0

这就是我想我会做什么,最终的感谢。 – Applehund 2010-07-20 06:55:38

0

不记得解决您的主要问题的权利,但我在这里看到另一个潜在的问题 - 你在撷取你的对象,然后开始交易。以下是潜在的问题:

2. fetch BankAccount (let's say it has balance of $100) 
2.5 Some other process modifies' the BankAccount to have a balance of $200 
3. begin transaction 
4. deposit $20 into BankAccount 
5. commit new balance ($120) into BankAccount 

哎呀!你刚刚掏出一大笔钱。本来应该是220的余额现在是120的余额。