【问题标题】:Spring JPA Hibernate query cache doesn't workSpring JPA Hibernate 查询缓存不起作用
【发布时间】:2016-10-25 18:14:23
【问题描述】:

我使用 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】:
    @Repository
    public interface AuthorRepository extends CrudRepository<Author, Integer> {
        @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") })
        Author findByName(String name);
    }
    

    应该做的伎俩。 (注意:不需要@Repository,因为您已经扩展了 CrudRepository)

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 1970-01-01
      • 2016-08-26
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      • 2019-07-16
      • 1970-01-01
      相关资源
      最近更新 更多