我只是试图将项目的结果存储在缓存中,除了密钥之外一切顺利。
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。 不幸的是,创建自定义键生成器将无济于事,因为所有基于参数,目标类和方法。
任何建议?
答案 0 :(得分:0)
我认为您希望优化缓存存储,以便稍后按项ID进行查询。
如果您正确地将JPA二级配置到您的实体,则不需要这样做,当配置良好时,使用JPA按ID加载实体将自动使用二级。
要获得单个结果,只需在关键属性上使用Cache SpEL #result:
@Cacheable(cacheNames="item", key="#result.id")