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 查询的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot JPA - 本机查询双撇号上的 SQL 错误
本机查询支持 SQL Server 的 Spring 数据 jpa 流