1

私はこれらをメソッドに持っています:

@Cacheable(value="products")
public Product findByName(String name)
@CacheEvict(value = "products", key="#productId")
public boolean updateProduct(int productID)

製品には、キーであるフィールド ID があります。

今、私は問題を抱えています。メソッド findByName は、更新メソッドを使用した後でも古いオブジェクトを見つけます。問題は、findByName が productId ではなくキー名でオブジェクトを保存したことだと思います。メソッドの引数に、productId がありません。しかし、返されたオブジェクトのプロパティを使用するようにSpringキャッシュに指示する方法はわかりません。

4

2 に答える 2

2

返されたオブジェクトのフィールドをキャッシュ キーとして使用することはできません。このパラメーターには、入力パラメーターのみが有効ですkey="#someFieldName"

古いオブジェクトに問題がある場合は、製品の更新後に、次のfindByNameような方法とは異なるキー タイプを使用してキャッシュ全体を削除する必要がある場合があります。

@CacheEvict(value = "products", allEntries = true) 
于 2012-10-25T09:05:00.227 に答える
0

これは、Spring キャッシュ フレームワークで inte を実行するためのかなり一般的な制限です。それが問題になった場合、私が通常それを回避する方法は、たとえそれが必要でなくても、キャッシュを追い出す必要がある呼び出しに必要なパラメーターを含めることです。そのようです:

@CacheEvict(value = "products", key="#productName")
/* productName only needed for CacheEvict... */
public boolean updateProduct(int productID, String productName) {
...
}
于 2012-10-25T12:58:53.900 に答える