問題是:ds.put(employee)是否發生在事務中?或者外部事務是否被saveRecord(..)中的事務清除/重寫?谷歌應用程序引擎數據存儲上的嵌套事務3
- 一旦在for循環(假設i == 5)中的某個點處在行datastore.put(..)處引發錯誤,以前的放置將始發在同一行上是否會回滾?
- 那麼在saveRecord(..)中發生的情況如何。我想那些不會被回滾。
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService() Transaction txn = datastore.beginTransaction(); try { for (int i=0; 1<10; i++) { Key employeeKey = KeyFactory.createKey("Employee", "Joe"); Entity employee = datastore.get(employeeKey); employee.setProperty("vacationDays", 10); datastore.put(employee); Entity employeeRecord = createRecord("record", employeeKey); saveRecord(employeeRecord); } txn.commit(); } finally { if (txn.isActive()) { txn.rollback(); } } public void saveRecord(Entity entity) { datastore.beginTransaction(); try { // do some logic in here, delete activity and commit txn datastore.put(entity); } finally { if (datastore.getCurrentTransaction().isActive()) { datastore.getCurrentTransaction().rollback(); } } }
是'ds.beginTransaction()'你的自定義代碼嗎?每次通話都會返回相同的交易還是新的交易? – 2012-08-06 15:48:42
ds僅僅是對API DataStore對象的引用。 – honzajde 2012-08-06 18:02:54
我編輯了過於模糊的原始示例...請回答最後一次。謝謝。 – honzajde 2012-08-08 12:36:08