当前位置: 首页 > 知识库问答 >
问题:

Spring JPA Hibernate查询缓存不起作用

司徒俊良
2023-03-14

我使用Spring Boot 1.4.1和spring-boot-starter-data-jpa

当查询我的自定义方法时,比如'find byname(String name)',它不是缓存。

spring.jpa.properties.hibernate.cache.use_query_cache=true
@Repository
public interface AuthorRepository extends CrudRepository<Author, Integer> {
    Author findByName(String name);
}
public class RepositoryTests {
    @Autowired
    private AuthorRepository authorRepository;

    @Test
    @Transactional
    public void test() {
        authorRepository.save(new Author("admin"));

        // ***Not work. query **5** times.
        Author author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");
        author = authorRepository.findByName("admin");

        // ***It's work. query **1** times.
        Author author = authorRepository.findOne(1);
        author = authorRepository.findOne(1);
        author = authorRepository.findOne(1);
        author = authorRepository.findOne(1);
        author = authorRepository.findOne(1);
    }
}

共有1个答案

毋胜涝
2023-03-14
@Repository
public interface AuthorRepository extends CrudRepository<Author, Integer> {
    @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
    Author findByName(String name);
}

应该能做到这一点。(注意:不需要@repository,因为您已经扩展了CrudRepository)

 类似资料:
  • 问题内容: 我正在尝试但未能成功在具有以下 依赖项的* Spring Data 和 Hibernate environmet中缓存查询: * 我的实体服务的Spring Data Repository(ServiceRepository)是 从中调用存储库的@Cacheable方法 我的缓存配置文件(jpa-context.xml)是 它的灵感来自spring-data-jpa-examples

  • 它的灵感来自spring-data-jpa-examples/src/main/resources/caching-repository-context.xml 看日志;每次请求时,我都会看到查询被执行。 下次我请求时,我看到以下查询;

  • 给出了一个带有express的nodejs应用程序,它通过nginx运行。我正在尝试使用ETag添加缓存支持。 如果没有nginx,如果应用程序被直接调用它的工作。我设置了如果无匹配头,并收到一个304。 对于nginx,响应总是200。 我的Nginx配置: 快车的日志记录。 信息:HTTP GET/app/statusCode=200,url=/app/,connection=upgrade,

  • 你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。 我得到这个错误: Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM U

  • 嗨,我在执行方法时遇到清理缓存的问题。这是我的配置和缓存方法: 我要缓存的这个方法: 在执行此方法时,我希望按类型清理缓存: 新闻消息对象看起来像: 缓存工作正常,第一次查询DB时,第二次从缓存中提取数据。问题是当我更新数据时,@CacheEvict不会清理缓存。我试图使用以下注释清理所有缓存:@cacheexit(cacheNames={CacheConfiguration.RSS\u NEWS

  • 问题内容: 我正在使用JPA在基于Java EE的Web应用程序中加载和保留实体。Hibernate用作JPA的实现,但是我不使用特定于Hibernate的功能,而只能使用纯JPA。 这是一些DAO类的notice 方法: 方法很简单,但是有很大的缺点。每次调用该方法时,都会在JPA实现中的某处执行以下操作: JPQL表达式被解析并编译为SQL。 Statement或PreparedStateme