我正在使用spring-ehcache-annotations并遇到以下情况:
我有一个简单的POJO如下
class Person{
private Long id;
private String name
//some code
}
现在DAO我有
public Person getPerson(Long personId){}
public Person UpdatePerson(Person person){}
现在在更新人员中我需要类Person的参数,我需要使用person的personId作为缓存的键。
这可以通过为每个类隐藏CacheKeyGenerator或者放置if / else的块来实现,但是我们可以使用一些可配置的东西来赋予参数字段作为键吗?
答案 0 :(得分:3)
答案 1 :(得分:0)
这可以通过注释完成。
如果updatePerson
方法采用您持久化的修改后的Person
,则需要使用TriggersRemove
注释更新方法,以从缓存中逐出更新的Person。然后,您需要重新运行getPerson
方法来缓存更新后的Person。
根据上面链接中的updateWeather
方法,如果我了解手头的问题,您可以执行以下操作:
@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(Long personId) {
return (Person)(getSession().get(Person.class, personId));
}
@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
getSession().merge(person);
return getPerson(personId);
}
答案 2 :(得分:0)
尝试将@PartialCacheKey添加到getPerson方法的personId参数中。
就像这样:
@Cacheable(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather getPerson(@PartialCacheKey Long personId) {
return (Person)(getSession().get(Person.class, personId));
}
@TriggersRemove(cacheName="personCache", keyGenerator=@KeyGenerator(
name="ListCacheKeyGenerator",properties=@Property(name="includeMethod",value="false")))
public Weather updatePerson(@PartialCacheKey Long personId, Person person) {
getSession().merge(person);
return getPerson(personId);
}