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

时间:2019-03-29 10:29:20

标签: hibernate spring-data-jpa ehcache

我想为其中一个实体实现二级缓存,但是我使用非ID的字段来获取数据。我在很多帖子中读到二级缓存仅在我们使用id来获取数据时才有效。 ,这样我就可以实现二级缓存来使用ID以外的字段获取数据? 我正在使用Eh-cache,JPA存储库和spring Boot。如何实现查询缓存?

在属性文件中:

hibernate.cache.use_second_level_cache = true

hibernate.cache.use_query_cache = true

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);

}

1 个答案:

答案 0 :(得分:0)

通常,您在问如何缓存查询结果。 Hibernate为此提供了一个QueryCache

文档引用:

  

要使用查询缓存,您首先需要使用   以下配置属性:

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

示例457.使用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();
     

示例458.使用Hibernate本机API缓存查询

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