为特定查询禁用 Hibernate 二级缓存读取或更新

Disabling Hibernate Second level cache Read Or Update for specific query

我将 Redis 作为 Hibernate 的二级缓存。我根据实体的 ID 为实体启用了缓存。但是,我很少有查询需要 运行 基于名称、年龄等其他属性...在这种情况下,我当前的实现仍在访问缓存,丢失缓存,如果有任何更改则更新实体。由于它是基于ID进行缓存,因此它丢失了它。如果没有使用 ID 请求,我想忽略去缓存。有什么办法吗?

如果您需要任何其他信息,请告诉我。

您可以使用 Session.setCacheMode(CacheMode) 设置 CacheMode.IGNORE

这将忽略二级缓存从数据库中读取数据。

有两种second-level-caching:

  1. 缓存实体(按 id,或缓存自然 id -> id 映射)和集合
  2. 查询缓存

您似乎一直在考虑第一个发生在您 session.load(MyEntity.class, id) 时发生的事情。当您执行另一种类型的查询(例如 SELECT * FROM MyEntity WHERE age > 18)时,您可以使用查询缓存,通过设置 hibernate.cache.use_query_cache=true 并使用提示 org.hibernate.cacheable 标记查询以通过查询字符串缓存结果来启用。