Кэширование вложенных объектов с использованием Spring Cache? - PullRequest
3 голосов
/ 18 марта 2019

У меня есть 2 доменных объекта Price и Product, определенных ниже.

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.
}

Есть ли возможность кэшировать как product, так и price отдельно с соответствующими полями 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 объекта product в price-cache с ключом id объекта price.

Я пробовал несколько способов и комбинаций, используя SpEL, но не смог заставить его работать.

Если кто-нибудь пробовал что-то подобное, пожалуйста, помогите мне.

Спасибо.

1 Ответ

0 голосов
/ 18 марта 2019

Если вы возвращаете объект продукта, возможно, вы можете попробовать что-то вроде:

@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.
}
...