0

オブジェクトを更新した後、appengine Web アプリから更新されたオブジェクトのリストを取得しようとしています。

コンソールを見ると、更新操作の後、エンティティに新しい値があることがわかりますが、オブジェクトのリストを要求すると、更新が行われなかったため、古い値が返されました

私の更新の実装は

 public void update( final T entity ){
        entityManager.merge( entity );
        entityManager.flush();
     }

私の取得リストの実装は

@SuppressWarnings("unchecked")
     @Transactional(readOnly = true)
     public List< T > findAll(){
        entityManager.flush();
        return entityManager.createQuery("select f from " + clazz.getName() + " as f").getResultList();
     }

update 、 merge メソッドに問題がありますか、またはデータストアがこの操作後に更新されない特別なキャッシュを使用していますか? 助けてください。ありがとう

4

1 に答える 1

1

@dragonx がコメントで指摘したように、これは HRD の結果整合性が原因で発生します。

エンティティが更新されると、put(..)エンティティ データが永続化されるとすぐに への呼び出しが返されますが、関連するすべてのインデックスが構築される前に返されます。

したがって、エンティティを取得するためにインデックスに依存しないため、put()すぐget()に を実行すると、一貫したデータが得られます。get()

ただし、クエリがインデックスに依存しており、挿入/更新されたエンティティのインデックス エントリがまだ作成中であるため、put()すぐquery()に を実行すると、更新されたデータを取得できない可能性があります。

于 2012-09-14T07:30:37.403 に答える