Spring JPA Hibernate查询缓存不起作用

问题描述 投票:2回答:1

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

当查询我的自定义方法(例如'findByName(String name)'时,它不会被缓存。

但是当查询默认方法,例如'findOne(Interger id)'时,它是有效的。

application.properties:

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);
    }
}
hibernate spring-data-jpa
1个回答
2
投票
@Repository
public interface AuthorRepository extends CrudRepository<Author, Integer> {
    @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
    Author findByName(String name);
}

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

© www.soinside.com 2019 - 2024. All rights reserved.