2017-02-16 3 views
0

私は、アイテムの結果をキャッシュに保存しようとしましたが、キー以外はすべてうまくいっていました。春のデータのカフェインキャッシュキー

SimpleKeyGeneratorは、通常、引数に基づいてオブジェクトまたは結果を保存します。私の場合は、キャッシュにオブジェクトを格納し、キーはリスト内のオブジェクトの属性にする必要があります。

public class Item{ 
    private Long id; 
    private Long reference; 
    private Integer status; 
    //setter and getter 
} 

public interface ItemRepository extends JpaRepository<Long,Item>{ 

    @Cachable("items") 
    List<Item> findByReferenceAndStatus(Long reference, Integer status); 
} 

は、今私は、私たちは、アノテーションのキー属性を使用することができます知っているitem.idに基づいて、キャッシュ内の各オブジェクトを保存したいが、どのように私はSPELを使用して、各項目のIDにアクセスすることができます。 残念ながら、カスタムキージェネレーターの作成は、引数、ターゲットクラス、およびメソッドに基づいているため、役に立たないでしょう。

おすすめですか?

答えて

0

私は、アイテムIDで後で照会できるようにキャッシュストレージを最適化したいと考えています。

JPAの第2レベルをエンティティに正しく設定する場合は、エンティティに正しく設定する必要はありません。JPAを使用してIDでエンティティをロードする設定が適切な場合、自動的に2番目のレベルが使用されます。単一の結果に

だけキー属性にキャッシュSPELの#resultを使用します。

https://docs.spring.io/spring/docs/current/spring-framework-reference/html/cache.html#cache-spel-context-tbl

@Cacheable(cacheNames="item", key="#result.id")