我明白多個對象,使用Spring的(3.1)建於CacheManager中使用的Ehcache實現,也有一定的侷限性在代理模式下(默認設置)時,按這個帖子:的Ehcache:@CacheEvict上使用批註
Spring 3.1 @Cacheable - method still executed
來考慮一下,我有:
@CacheEvict(value = "tacos", key = "#tacoId", beforeInvocation = true)
removeTaco(String tacoId) {
// Code to remove taco
}
removeTacos(Set<String> tacoIds) {
for (String tacoId : tacoIds) {
removeTaco(tacoId);
}
}
在這個倉庫方法,調用removeTacos(tacoIds)實際上並不會因爲從上述限制的緩存集中退出任何東西。我的解決方法是,在上面的服務層上,如果我想要刪除多個玉米餅,我會遍歷每個taco Id並將其傳遞到removeTaco(),並且從不使用removeTacos()但是,我不會使用removeTacos()想知道是否有另一種方法來實現這一點。
1)是否有一個SpEL表達式可以傳遞給關鍵字,告訴EhCache過期Set中的每個ID?
e.g. @CacheEvict(value = "tacos", key = "#ids.?[*]") // I know this isn't valid, just can't find the expression.
或者有沒有一種方法可以讓removeTacos()調用removeTaco並實際過期Cached對象?