如何使用Spring Expression Language从Set集合中提取元素以进行缓存

时间:2016-11-20 17:51:24

标签: java spring spring-mvc

我有一个这样的课程

public class RegionShopMap {

private Integer regionId;
private String shopId;
}

和使用Set集合保存这些对象批次的DAO方法。 方法签名:

void saveRegionShops(Set<RegionShopMap> regionShopMapSet);

我的问题是我正在尝试使用来自Set的RegionShopMap对象的regionId作为关键字来执行缓存逐出。对于Set中的所有对象,regionId是相同的。 我不知道如何使用Spring Expression Language来提取regionId。 我尝试过这样的事情:

@CacheEvict(value = "Shop.byRegionId", key ="#regionShopMapSet[0].regionId")  

任何帮助都会受到高度赞赏,或者可能是另一种解决方案。

非常感谢

1 个答案:

答案 0 :(得分:0)

如果你想使用EL提取regionId的值,那么你写的内容非常好。

@Data
@AllArgsConstructor
static class RegionShopMap {
    private Integer regionId;
    private String shopId;
}

public static void main(String args[]) {
    ExpressionParser parser = new SpelExpressionParser();
    StandardEvaluationContext context = new StandardEvaluationContext();
    Set<RegionShopMap> regionShopMapSet = new HashSet<>();
    regionShopMapSet.add(new RegionShopMap(1, "2"));
    regionShopMapSet.add(new RegionShopMap(3, "4"));

    context.setVariable("regionShopMapSet", regionShopMapSet);
    Expression exp = parser.parseExpression("#regionShopMapSet[1].regionId");
    System.out.println(exp.getValue(context));
    return;
}

但是正如您所提到的,regionId的值对于所有对象都是相同的。 在这种情况下,您应该尝试使用CacheEvict而不使用任何密钥。