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
out aa givenを作成することでありkey
、それ以外の場合は単に NULL を返します。これは、JUnit で HR 構成がなくても正常に機能しますが、構成すると、_ds.get(key)
キーのスローが見つからないというエラーが常に発生します。
EntityNotFoundException: No entity was found matching the key:
具体的には、次の場合です。
while(it.hasNext()){
// stuff
createEntity(key, map);
// stuff
}
私のコードの問題は、エンティティを取得しようとするのが早すぎることだと思います。もしそうなら、どうすればこれに頼らずに対処できますかMemcache
?
アップデート:
がcreateEntity
トランザクション内で実行されると、失敗します。ただし、惨めに失敗した場合、トランザクションの外でそれを削除すると。トランザクション内で実行できるようにする必要があります。これは、より高いレベルの API がグループとして存在する必要がある多くのオブジェクトを配置するためです。
アップデート:
_ds.get(key)
私はストロムのアドバイスに従いましたが、メソッドを実行PreparedQuery
countEntities
しないと失敗するという奇妙な副作用が見つかりました。どこに追加して_ds.get(key)
も、何もしないか、そのEntity
戻り値を保存してcountEntities
、期待されるカウントを返します。何故ですか?