Все это можно сделать с аннотациями.
Если метод updatePerson
принимает измененный Person
, который вы сохраняете, то необходимо аннотировать метод обновления с помощью TriggersRemove
, чтобы исключить обновленного человека из кэша. Затем вам нужно перезапустить метод getPerson
для кэширования обновленного Person.
См. Пример кода на сайте: https://code.google.com/p/ehcache-spring-annotations/source/browse/examples/ehcache-spring-example-1/trunk/src/main/java/com/googlecode/ehcache/annotations/examples/impl/SpringJdbcWeatherServiceImpl.java
Основываясь на методе 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);
}