我想为其中一个实体实现二级缓存,但是我使用非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);
}
答案 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();