我已经配置了ehcache来使用hibernate和hibernate来处理spring-data,并且所有框架都可以正常工作。例如,当我使用方法'T findOne(ID var1);'时CrudRepository类,一切正常,值从缓存中获取。
我希望这种行为适用于方法'Iterable findAll(Iterable var1);'因为它应该很容易检查每个特定的id,如果它存在于缓存中,然后根据已经在缓存中找到哪个id来形成查询,哪些不是。 例如,如果我在缓存中有id为{1,2,3}的项目,并且我尝试调用findAll({1,3,4,5}),则查询应仅包含{4,5}。另外,如果我调用findAll({1,3}) - 根本不应该对数据源进行查询,所有数据都应从缓存中获取。
这些是我的期望。但实际上,即使所有id都已经在缓存中,spring-data也总是形成完整的请求。有关如何强制预期行为的任何建议吗?
ps:我知道,我可以缓存查询,但是这种情况完全不同,我不想通过参数缓存查询,我希望将参数列表视为单独的项,可以单独从缓存中获取(但是如果某些项目需要查询,则应该通过一个查询来完成,而不是很多!)答案 0 :(得分:2)
使用基本的spring-data jpa存储库似乎是不可能的(jpa现在没有用于通过多个ID获取的API)。
但你可以尝试
当然,如果你正在使用Hibernate 5.1 +。
它应该使用MultiIdentifierLoadAccess.with mathod(https://docs.jboss.org/hibernate/orm/5.2/javadocs/org/hibernate/MultiIdentifierLoadAccess.html#with-org.hibernate.CacheMode-)来管理L2缓存
希望它有所帮助。