JPA 和缓存本机 SQL 查询

Posted

技术标签:

【中文标题】JPA 和缓存本机 SQL 查询【英文标题】:JPA and caching native SQL query 【发布时间】:2014-11-26 17:58:42 【问题描述】:

是否有可能在 JPA 中缓存原生 sql 查询?

我找到了:

JPA 2.0 缓存 API

JPA 2.0 提供了一组标准查询提示以允许刷新或绕过缓存。查询提示在两个枚举类 CacheRetrieveMode 和 CacheStoreMode 上定义。

查询提示:

javax.persistence.cache.retrieveMode : CacheRetrieveMode
    BYPASS : Ignore the cache, and build the object directly from the database result.
    USE : Allow the query to use the cache. If the object/data is already in the cache, the cached object/data will be used.
javax.persistence.cache.storeMode : CacheStoreMode
    BYPASS : Do not cache the database results.
    REFRESH : If the object/data is already in the cache, then refresh/replace it with the database results.
    USE : Cache the objects/data returned from the query.

缓存提示示例

Query query = em.createQuery("Select e from Employee e"); query.setHint("javax.persistence.cache.storeMode", CacheStoreMode.REFRESH);

但它可能仅适用于非 NATIVE 查询...

【问题讨论】:

【参考方案1】:

不,JPA 缓存不适用于本机查询,因为本机查询不会被 JPA 提供程序解析或理解 - 它们直接进入数据库。您可能想要的是语句缓存或查询结果缓存,它们是 JPA 未涵盖的不同概念,并且特定于您的 JPA 提供程序,请参阅 http://eclipse.org/eclipselink/documentation/2.5/jpa/extensions/q_query-results-cache.htm 以获取有关 EclipseLink 查询缓存的信息(尽管我不知道它适用于本机查询任何一个)。

【讨论】:

以上是关于JPA 和缓存本机 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

JPA本机sql查询映射错误?

Spring Boot JPA - 本机查询双撇号上的 SQL 错误

本机查询支持 SQL Server 的 Spring 数据 jpa 流

如何通过 Spring Boot JPA 执行具有 INTERVAL 子句的本机 SQL 查询?

用于“选择到 outfile”的 JPA 本机查询

JPA 中的传递列表命名本机查询