2016-06-19 13 views
1

私は以下のコードスニペットのように、 "User"エンティティとネストされた組み込みクラス "Options"を持っています。しかし、このコード "OfyService.ofy()。save()。entity(user);"を実行した後に、&を変更すると、Optionsクラスの値の変更が常に更新されるわけではありません。Google appengine - オブジェクト化の問題。埋め込みクラスは更新されません

誰でもこの問題に気付いていますか? @Cache注釈を変更するものは何ですか?ありがとう。

@Entity 
@Cache 
public class User { 
@Id Long id; 
Options options; 
... 

    public static class Options { 
     Boolean optNotification; 
     ... 
    } 
} 
+0

明らかに間違っていることはありません。エンティティを保存/読み込むコードをもっと投稿してください。非同期の将来の振る舞いや、先物がフラッシュされるとき(トランザクション境界、 'ObjectifyFilter'の終わり、' now() 'を呼び出すとき)を理解してください。 – stickfigure

+0

このヒントをありがとう。私はすべてのロードと保存の動作を見直しました。私は、1つのHTTPリクエスタ内に2つのセーブを発見しました。 – Ming

答えて

0

私はあなたがknown stale cache issue with Objectifyに実行していることを推測しています。

提案回避策は、次の手順を実行して、キャッシュエントリを削除するには、次のとおりです。

MemcacheServiceFactory 
    .getMemcacheService(ObjectifyFactory.MEMCACHE_NAMESPACE) 
    .delete(key.toWebSafeString()); 
+0

この「古くなったキャッシュの問題」は、低レベルAPIを使用してObjectifyをバイパスしている場合、キャッシュが期限切れになることがあります。誰にも驚かないはずです。このSOの質問には、低レベルのAPIはまったく言及されていないので、これは関連する可能性は低いです。 – stickfigure

0

おかげ@Cliffordリストに私を尋ねるために、それは私が私が2セーブ持っ実現に貢献ので/負荷を節約できます。すなわちコードは "OfyService.ofy()。save()。entity(user);"を実行しました。 2回を1回のhttp要求で送信します。私は最初の救済を取り除きました。問題はもう消えました。 Btw、私は最初の保存を取り除く前に、私はすでに両方の保存にdefer()を使ってみましたが、それは私を驚かせた解決策ではありません。

関連する問題