2016-10-25 6 views
0

「findByName(文字列名)」のようなクエリ私のカスタムメソッドは、それがキャッシュではないとき、私は春のブート1.4.1と春・ブート・スターター・データ-JPA春JPA Hibernateのクエリキャッシュdoes't作業

を使用しています。

しかし、 '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); 
} 

はトリックを行う必要があります。 (注:すでにCrudRepositoryを拡張しているため@Repositoryは不要です)

+0

ありがとうございます。 – Alex

関連する問題