我有這樣的代碼thtat只是正常的W/O HR:持久性策略高複製環境(谷歌應用程序引擎)
protected Entity createEntity(Key key, Map<String, Object> props){
Entity result = null;
try {
Entity e = new Entity(key);
Iterator it = props.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();
String propName = entry.getKey();
Object propValue = entry.getValue();
setProperty(e, propName, propValue);
}
key = _ds.put(e);
if (key != null)
result = _ds.get(key);
} catch (EntityNotFoundException e1) {
}
return result;
}
這僅僅是一個簡單的方法,其中它的功能是創建一個新的Entity
出aa給出key
,否則返回NULL。這沒有JUnit的人力資源配置工作正常,但是當我配置它,我總是得到一個錯誤,其中_ds.get(key)
找不到鍵投擲:做的時候
EntityNotFoundException: No entity was found matching the key:
具體做法是:
while(it.hasNext()){
// stuff
createEntity(key, map);
// stuff
}
我假設我的代碼中的問題是它試圖儘快提取實體。如果是這樣的話,我該如何處理這個沒有訴諸於Memcache
或類似的東西。
更新:
當createEntity
在事務內執行的,它失敗。但是,如果我在交易之外將其刪除,如果失敗失敗。我需要能夠在一個事務中運行,因爲我的更高級別的API把許多需要作爲一個組的對象放在那裏。
更新:
我跟着Strom的提醒,但是我發現了一個奇怪的副作用,不這樣做的方法_ds.get(key)
,使我PreparedQuery
countEntities
失敗。如果增加一個_ds.get(key)
即使我什麼都不做或者保存Entity
返回從那個得到countEntities
返回預期的計數。這是爲什麼?
你的建議工作,它對我的應用程序有一個奇怪的副作用 – xybrek 2013-04-10 12:26:59