我正在Google AppEngine上編寫同步服務,但某些事情對我來說並不真正起作用。我想要做的是同步一個實體項目(也許它需要被持續,也許只是複製內容,誰知道),然後搜索一個項目類型的實體(可能與第一個項目一樣,但沒有' t需要)然後用它來同步任務。 所有這些都需要在事務中發生,所以如果任務同步失敗,該項目也會被刪除。AppEngine:無法從事務中的數據存儲中讀取持久數據
我寫了一些代碼行來簡單地測試和顯示出了什麼問題。 此代碼完美工作,並向我展示「找到項目」。
User user = userDao.findAll().get(0);
// Create a setup service...
Project project = new Project();
project.setName("TEST ABC");
project.setLastUpdated(new Date());
project.setUser(user);
projectDao.persist(project);
Project persistedProject = projectDao.find("TEST ABC", user);
if (persistedProject == null) {
System.out.println("Project not found...");
} else {
System.out.println("Project found!");
}
所以在這裏我不使用交易。但是,當我執行與交易的代碼:
User user = userDao.findAll().get(0);
Transaction tx = datastores.get().beginTransaction();
// Create a setup service...
Project project = new Project();
project.setName("TEST ABC");
project.setLastUpdated(new Date());
project.setUser(user);
projectDao.persist(project);
Project persistedProject = projectDao.find("TEST ABC", user);
if (persistedProject == null) {
System.out.println("Project not found...");
tx.rollback();
} else {
System.out.println("Project found!");
tx.commit();
}
我總是看到「項目未找到...」。那麼,我到底能夠讀到一個我剛剛堅持下來的對象,但還沒有犯下呢?
順便說一句:我使用樹枝堅持2.0 RC1和最新的AE SDK(1.7)。
所以我的問題是我怎樣才能讀取持續在同一交易中的數據..?
據我所知,我正在處理數據存儲的快照,並且在另一個事務中添加的內容不會顯示在我的結果中。但它是有道理的,增加我在我的交易中做的查詢能夠在我自己的交易中... 手動加入,你的意思是創建一些緩存系統,當我做一個查詢,我手動掃描我的現金列表if任何對象符合?或者你的意思是別的? – dirkvranckaert
不,作爲文檔狀態,哪個dragonx鏈接到上面,這不是快照隔離的工作方式。真正的問題是,爲什麼你想在一次交易中做到這一點? –
通過手動「加入」我的意思是你可以搜索你的結果查詢列表,但首先手動添加新創建的實體。 – dragonx