2012-02-21 12 views
9

Я могу использовать Query Cache с Spring Data JPA для моих пользовательских методов запроса, как показано ниже.Как добавить QueryHints по умолчанию Spring Data JPA Methods?

public interface CountryRepository extends JpaRepository<Country, String> { 
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") }) 
Country findByCountryName(String countryName); 
@QueryHints({ @QueryHint(name = "org.hibernate.cacheable", value ="true") }) 
Country findByCountryCode(String countryCode); } 

Однако, как добавить @QueryHints на существующие родительские методы, такие как findAll()?

Спасибо.

+0

@oliver -gierke, вы хоть представляете, как этого добиться? –

+0

У меня такая же проблема. Я попытался переопределить их и добавить аннотации @QueryHint, но они игнорируются. –

+0

@ user791694, см. Ответ sgp15 по адресу http://stackoverflow.com/a/10876707/418439 –

ответ

3

findAll(), findOne() и т. Д. Не являются запросами. В этих методах действуют все спецификации кэширования для объекта.

Например,

@Cacheable 
@Entity 
public class User { 

} 
+0

См. Также [настройка @Cacheable] (http://stackoverflow.com/a/3664293/418439) –

+0

У меня есть эти set и для findВсе все идет в базу данных. Есть что-то, что мне нужно включить? –

+0

@ Cacheable, похоже, не влияет на findAll(). Я понимаю, что findOne() связан с кешем уровня 2, но findAll() связан с «Query cache». Чтобы кэшировать findAll(), я переопределяю метод и добавляю @ queryhints. –

1

Первоначально не было никакой поддержки для подсказок запросов аннотаций в методах CRUD по умолчанию, но, видимо, Хасс был зафиксирован для версии 1.6M1:

https://jira.spring.io/browse/DATAJPA-173