这是我的一个方法的psudo代码:
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“完成”,喜欢关闭它吗?
谢谢
答案 0 :(得分:1)
虽然你说的应该有效,但它可能是一个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
答案 1 :(得分: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的余额。