如何在使用除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();
我想为其中之一实现二级缓存 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();