如何在默认 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 / Hades 事务行为

Spring Data JPA事务支持

除非明确指定,否则如何在默认情况下将 Spring Data JPA 从 camelCase 命名为 snake_case?

Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 两种处理方法

如何在 Spring Boot 应用程序的同一个域类上同时使用 Spring Data JPA 和 Spring Data Elasticsearch 存储库?

什么是 Spring Data JPA 中的默认 ORM 提供程序