如何在使用除Id之外的字段获取数据时实现二级缓存

How to implement second level cache while fetching data using field apart from Id

我想为其中之一实现二级缓存 entities.But 我正在使用不是 ID.I 的字段获取数据 在很多帖子中读到二级缓存只有在我们使用id.Is 有什么方法可以实现二级缓存来使用 id 以外的字段获取数据吗? 我正在使用 Eh-cache、JPA 存储库和 spring Boot.How 我可以实现查询缓存吗?

在属性文件中:

hibernate.cache.use_second_level_cache=真

hibernate.cache.use_query_cache=真

hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory

Repository.java

public interface SomeRepository extends JpaRepository<SomeClass, Long> {

   @Query("SELECT .....WHERE id= :someId")
   @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
   List<Lookup> findAllByProjectId(@Param("someId") Long someId);

}

一般来说,你问的是如何缓存查询结果。 Hibernate 有一个 QueryCache 用于此目的:

引自文档:

To use query caching, you will first need to enable it with the following configuration property:

<property
    name="hibernate.cache.use_query_cache"
    value="true" />

Example 457. Caching query using JPA

List<Person> persons = entityManager.createQuery(
  "select p " +
  "from Person p " +
  "where p.name = :name", Person.class)
.setParameter( "name", "John Doe")
.setHint( "org.hibernate.cacheable", "true")
.getResultList();

Example 458. Caching query using Hibernate native API

List<Person> persons = session.createQuery(
  "select p " +
  "from Person p " +
  "where p.name = :name")
.setParameter( "name", "John Doe")
.setCacheable(true)
.list();