2010-07-19 8 views
0

Voici le psudo code pour un de mes méthodes:Google App Engine: comment "fermer" un objet avant la deuxième transaction?

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 

mais je reçois cette erreur « ne peut pas fonctionner sur des groupes d'entités multiples dans une seule transaction ... »

Dois-je mettre une autre ligne entre l'étape 5 et 7 en disant que je suis 'fait' avec object1, comme pour le fermer?

Merci

Répondre

1

Bien que ce que vous dites devrait fonctionner, il peut être un bug dans l'appengine. En attendant, vous pouvez faire ce qui suit (pseudo code) ou avoir les deux entités object1 et object2 dans les mêmes groupes d'entités. Plus d'informations sur les transactions et les groupes d'entités 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 

Il y a plus de discussions here

+0

ce que je pense que je vais finir par faire, merci. – Applehund

0

ne me souviens pas la solution à votre problème principal en ce moment, mais je ne vois un autre problème potentiel ici - vous récupérez vos objets, puis à partir d'une transaction. Voici le problème potentiel avec cela:

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 

Oups! vous venez d'effacer tout un tas d'argent. ce qui aurait dû être un solde de 220 est maintenant un solde de 120.