如何在默认 Spring Data JPA 方法上添加 QueryHints?
Posted
技术标签:
【中文标题】如何在默认 Spring Data JPA 方法上添加 QueryHints?【英文标题】:How to add QueryHints on Default Spring Data JPA Methods? 【发布时间】:2012-03-11 09:28:14 【问题描述】:我可以将查询缓存与 Spring Data JPA 一起用于我的自定义查询方法,如下所示。
public interface CountryRepository extends JpaRepository<Country, String>
@QueryHints( @QueryHint(name = "org.hibernate.cacheable", value ="true") )
Country findByCountryName(String countryName);
@QueryHints( @QueryHint(name = "org.hibernate.cacheable", value ="true") )
Country findByCountryCode(String countryCode);
但是,如何在 findAll() 等现有父方法上添加 @QueryHints?
谢谢。
【问题讨论】:
@oliver-gierke,您知道如何实现这一目标吗? 我也有同样的问题。我试图覆盖它们并添加 @QueryHint 注释,但它们被忽略了。 @user791694,请参阅下面***.com/a/10876707/418439sgp15 的答案@ 【参考方案1】:findAll()、findOne() 等不是 Query(s)。实体上的任何缓存规范都在这些方法中生效。
例如,
@Cacheable
@Entity
public class User
【讨论】:
我有这些设置和 findAll 它进入数据库。有什么我需要打开的吗? @Cacheable 似乎对 findAll() 没有任何影响。我的理解是 findOne() 链接到“二级缓存”,但 findAll() 链接到“查询缓存”。为了缓存 findAll(),我重写了该方法并添加了 @queryhints。【参考方案2】:最初,默认 CRUD 方法中不支持查询提示注释,但显然它已在 1.6M1 版本中得到修复:
https://jira.spring.io/browse/DATAJPA-173
【讨论】:
以上是关于如何在默认 Spring Data JPA 方法上添加 QueryHints?的主要内容,如果未能解决你的问题,请参考以下文章
除非明确指定,否则如何在默认情况下将 Spring Data JPA 从 camelCase 命名为 snake_case?
Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 两种处理方法
如何在 Spring Boot 应用程序的同一个域类上同时使用 Spring Data JPA 和 Spring Data Elasticsearch 存储库?