弹簧数据中的咖啡因缓存键jpa

时间:2017-02-16 08:57:46

标签: spring jpa spring-data caffeine

我只是试图将项目的结果存储在缓存中,除了密钥之外一切顺利。

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将每个对象存储在缓存中,我知道我们可以使用注释的key属性但是如何使用SpEL访问每个项目的Id。 不幸的是,创建自定义键生成器将无济于事,因为所有基于参数,目标类和方法。

任何建议?

1 个答案:

答案 0 :(得分:0)

我认为您希望优化缓存存储,以便稍后按项ID进行查询。

如果您正确地将JPA二级配置到您的实体,则不需要这样做,当配置良好时,使用JPA按ID加载实体将自动使用二级。

要获得单个结果,只需在关键属性上使用Cache 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")