使用Spring Cache来缓存嵌套对象吗?

时间:2019-03-18 08:35:06

标签: java spring spring-boot caching spring-cache

我有2个域对象PriceProduct定义如下。

public class Price {
  private Long id;
  private Double basePrice;
  private Double tax;
  private Double maxRetailPrice;
}
public class Product {
  private Long id;
  private String title;
  private Price price;
}

我已经定义了Controller方法,如下所示:

@GetMapping("{id}")
@Cacheable(value = "product-cache", key = "#id")
public Product getProductById(@PathVariable Long id) {
  // some implementation goes here.
}

是否可以将productprice分别以其各自的id字段作为键来缓存?

类似的东西:

@GetMapping("{id}")
@Caching(cacheable = {
    @Cacheable(value = "product-cache", key = "#id"),
    @Cacheable(value = "price-cache", key = "???")
})
public Product getProductById(@PathVariable Long id) {
  // some implementation goes here.
}

如何使用键作为price对象的productprice-cache对象的id部分存储到price中。

我已经尝试使用SpEL进行多种方式和组合,但是无法使其正常工作。

如果有人尝试过这种方法,请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您要返回产品对象,则可以尝试以下操作:

@GetMapping("{id}")
@Caching(cacheable = {
    @Cacheable(value = "product-cache", key = "#id"),
    @Cacheable(value = "price-cache", key = "#result.data.product.price.id")
})
public Product getProductById(@PathVariable Long id) {
  // some implementation goes here.
}