2016-10-25 1 views
0

을 does't 스프링 부팅 스타터 데이터 JPA봄 JPA Hibernate 질의 캐시는 내가 봄 부팅 1.4.1 사용 및 작업

쿼리 '경우 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); 
} 

트릭을 할해야합니다. (참고 : CrudRepository를 이미 확장 했으므로 @Repository은 필요하지 않습니다.)

+0

감사합니다. – Alex