2016-10-25 7 views
0

Я использую Spring загрузки 1.4.1 и пружинными загрузки пускателя данных JPASpring JPA Hibernate кэш запросов does't работы

При запросе мой пользовательский метод, как «FindByName (имя String)» это не кэш.

Но когда метод запроса по умолчанию, подобный 'findOne (Interger id)', это работа.

application.properties:

spring.jpa.properties.hibernate.cache.use_query_cache=true 

Repository:

@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

Смежные вопросы