Objectify を使用して、保存したエンティティを確実に取得できません。
キャッシュが壊れているようです。奇妙なことに、管理コンソールのデータストア ビューアーを使用して、保存されたエンティティを正しく表示できます。また、RemoteApi を使用してエンティティを表示する小さなプログラムを作成し、保存された値を正しく表示できます。
サーブレットまたはクラウド エンドポイント REST API を使用してエンティティを連続してクエリすると、連続するクエリで異なる結果が返され、データストア/キャッシュ内の何かが破損しているように見えます。
私のエンティティは次のようになります。
class ContentEntity {
@Id Long id;
String html;
@Index String tag;
boolean publish;
}
このように保存しています。
ContentEntity entity = ofy().load.type(ContentEntity.class)
.filter("tag", "my tag").first().get();
if (null == entity)
entity = new ContentEntity();
entity.html = "my html";
entity.tag = "my tag";
entity.publish = true;
ofy().save.entity(entity).now();
こんな感じで回収します。
ContentEntity entity = ofy().load().type(ContentEntity.class).
filter("tag", "my tag").first().get();
何が起こるかは次のとおりです-
1) ContentEntity.html の初期値を「値 1」にします
2) 新しい値を保存します - 「値 2」
3) 管理コンソールのデータストア ビューアーを使用すると、「値 2」が正しく保存されていることがわかります。(リモート API を使用しても「値 2」が表示されます)
3) 上記で貼り付けた取得コードを使用して、サーブレットまたは REST API を介してエンティティを表示します。「値 2」
が表示されます。 4) サーブレットまたは REST API を使用してエンティティを再度表示します。「値 1」
が表示されます。 5) もう一度表示します。
「値 1」と「値 2」の間で切り替わる「値 2」が表示されます
私の開発環境ではすべて正常に機能しましたが、appengine では機能しませんでした。
私は何か間違ったことをしているようで、結果整合性を正しく処理していません。私は常に強く一貫した結果を望んでいます。クエリが少し遅くなってもかまいません。私は何をすべきか ?
ヒント/提案/ヘルプをいただければ幸いです。
よろしく、
サティア