2016-10-25 131 views
0

我使用Spring 1.4.1引導和Spring引導起動數據JPA春天JPA的Hibernate查詢緩存簡化版,工作

當查詢我喜歡「findByName(字符串名稱)」自定義方法這不是緩存。

但是,當查詢默認方法像'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); 
    } 
} 

回答

1
@Repository 
public interface AuthorRepository extends CrudRepository<Author, Integer> { 
    @QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") }) 
    Author findByName(String name); 
} 

應該做的伎倆。 (注意:@Repository不需要,因爲你已經擴展了CrudRepository)

+0

謝謝你的提示。 – Alex