Spring репозиторий: @CacheEvict о методах сохранения - PullRequest
0 голосов
/ 25 июня 2019

Я хотел бы добавить @CacheEvict() декоратор к моим методам save / saveAll из моего репозитория.

Я попытался переопределить методы с помощью пользовательской реализации, прочитав эту тему но я не хочу переписывать реализацию метода, просто вызову стандартную с большим поведением.Ни одно из представленных решений не подходит для моего случая или требует слишком большой настройки.

@Transactional(readOnly = true)
@Repository
public interface MyRepository extends JpaRepository<MyEntity, Long> {

   // This is working fine as its a custom query method
   @Cacheable(value = "ENTITIES")
   MyEntity findByCategory(String category);

   // This isn't working as it won't implement the function correctly. Save don't work anymore here.
   @CacheEvict(value = "ENTITIES", key = "#entity.hashCode()")
   <S extends MyEntity> S save(S entity);

}

Я мог бы вызвать удаление кэша вручную из тела метода, но я не могу просто переопределить save()метод и вызов super.save(), так как я использую только интерфейсы и позволяю Spring генерировать реализацию.

Любые советы?

1 Ответ

0 голосов
/ 25 июня 2019

Found. Это было пустышкой. Только что удалил @Transactional (readOnly = true). Это мешало сохранению работать.

Так что достаточно просто переопределить сигнатуру метода, чтобы добавить некоторые декораторы, не заботясь о реализации.

@Override
@CacheEvict(value = "ENTITIES", key = "#p0.getKeyWhateverItIs()")
<S extends Feature> S save(S entity);

И да, значение ключа также было неверным, но не использовалось в нерабочем методе save.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...