2010-07-19 56 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的餘額。