灵感来自 this answer我尝试执行以下操作
@NoRepositoryBean
public interface CacheableRepository<T, ID extends Serializable>
extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>, PagingAndSortingRepository<T, ID> {
@Cacheable()
T findOne(ID id);
@Cacheable()
List<T> findAll();
@Cacheable()
Page<T> findAll(Pageable pageable);
@CacheEvict(allEntries = true)
<S extends T> S save(S entity);
@CacheEvict(allEntries = true)
void delete(ID id);
}
然后使用这个接口(interface)来定义Used repository
@CacheConfig(cacheNames={"uniqueCache"})
public interface SomeObjectRepo extends CacheableRepository<SomeObject, Long> {
@Cacheable(key = "someobject+#p0")
List<SomeObject> findByType(Integer type);
@Cacheable(key = "someobject+#p0")
List<SomeObject> findByCategory(String field);
@Cacheable(key="someobject+#p0.concat(#p1)")
List<SomeObject> findByCategoryAndWizardType_id(String field,Integer id);
}
作品:
上面的缓存适用于 findByType
、findByCategory
、findByCategoryAndWizardType_id
不起作用:
对于在 CacheableRepository
中定义的所有 cacheable
方法。似乎 SomeObjectRepo
上的 CacheConfig
注释不会影响 CacheableRepository
。
我的问题:
为什么注释不起作用?是否有解决方法可以使此结构正常工作?
谢谢, 橡木
最佳答案
是的,这几乎就是 Ollie 和我在尝试支持这种情况时发现的结果。
我建议您在 spring 数据项目中创建一个问题来请求该功能。
关于java - 是否可以定义通用接口(interface)并使用 Spring @CacheConfig?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32986807/