可以为 createOrUpdate 方法放置 @CachePut 注释吗?
Can @CachePut annotation be put for createOrUpdate method?
我有点怀疑 -
我的服务层中有一个方法,如果该 ID 不存在则创建记录,如果存在则更新记录。我可以在方法上加上@CachePut 注释吗?或者我是否也应该在上面加上 @Cacheable 注释
在这种情况下,您想在执行创建或更新的服务方法上使用 @CachePut
。例如...
假设...
class Customer {
@Id
Long id;
...
}
并给出...
@Service
class CustomerService {
CustomerRepository customerRepository;
@CachePut("Customers", key="#customer.id")
Customer createOrUpdate(Customer customer) {
// validate customer
// any business logic or pre-save operations
return customerRepository.save(customer);
}
}
@Cacheable
将在执行 createOrUpdate(:Customer)
之前在命名缓存中执行 后备 。如果具有 ID 的客户已存在于命名缓存中,则 Spring 将 return "cached" Customer
;在这种情况下,Spring 将不会执行 create/update 方法。
然而,如果识别的Customer
不存在(或无效),Spring继续执行createOrUpdate(:Customer)
方法,然后缓存方法的结果。
在@CachePut
情况下,Spring会一直执行createOrUpdate(:Customer)
方法。也就是说,Spring 不会在执行该方法之前执行旁视以确定 Customer 是否存在,这很可能是 create/update.
情况下您想要的
无论如何,可以在 Reference Guide. In particular, have a look at the @CachePut
docs and compare that with the @Cacheable
docs.
中找到有关基于声明的缓存的更多信息
希望这对您有所帮助!
-约翰
我有点怀疑 -
我的服务层中有一个方法,如果该 ID 不存在则创建记录,如果存在则更新记录。我可以在方法上加上@CachePut 注释吗?或者我是否也应该在上面加上 @Cacheable 注释
在这种情况下,您想在执行创建或更新的服务方法上使用 @CachePut
。例如...
假设...
class Customer {
@Id
Long id;
...
}
并给出...
@Service
class CustomerService {
CustomerRepository customerRepository;
@CachePut("Customers", key="#customer.id")
Customer createOrUpdate(Customer customer) {
// validate customer
// any business logic or pre-save operations
return customerRepository.save(customer);
}
}
@Cacheable
将在执行 createOrUpdate(:Customer)
之前在命名缓存中执行 后备 。如果具有 ID 的客户已存在于命名缓存中,则 Spring 将 return "cached" Customer
;在这种情况下,Spring 将不会执行 create/update 方法。
然而,如果识别的Customer
不存在(或无效),Spring继续执行createOrUpdate(:Customer)
方法,然后缓存方法的结果。
在@CachePut
情况下,Spring会一直执行createOrUpdate(:Customer)
方法。也就是说,Spring 不会在执行该方法之前执行旁视以确定 Customer 是否存在,这很可能是 create/update.
无论如何,可以在 Reference Guide. In particular, have a look at the @CachePut
docs and compare that with the @Cacheable
docs.
希望这对您有所帮助! -约翰