How to add Query Hints to spring data jpa querydsl queries?

Nazaret K. picture Nazaret K. · Mar 10, 2015 · Viewed 15.3k times · Source

I'm using Spring Data JPA 1.7.1

I was trying pass query hints (e.g. for Hibernate query caching) to queries when using the querydsl methods of the standard Spring Data repositories, as defined in the QueryDslPredicateExecutor interface, e.g. findOne(Predicate predicate), findAll(Predicate predicate) etc.

I figured that they can be set by overriding the methods in QueryDslPredicateExecutor (in my repository interface or an intermediate interface) and adding the QueryHints annotation, but since I cannot find this documented anywhere I was wondering if this is the recommended way of doing it.

Here is an example:

public interface MyEntityRepository extends CrudRepository<MyEntity, Integer>, CacheableQueryDslPredicateExecutor<MyEntity> {

    @QueryHints(value = {
            @QueryHint(name = "org.hibernate.cacheable", value = "true"),
            @QueryHint(name = "org.hibernate.cacheMode", value = "NORMAL"),
            @QueryHint(name = "org.hibernate.cacheRegion", value = "myCacheRegion")
    })
    Iterable<T> findAll(Predicate predicate);

}

Answer

Michael Simons picture Michael Simons · Mar 11, 2015

This is the recommended and correct way of doing it, see documentation for 1.7.1:

http://docs.spring.io/spring-data/jpa/docs/1.7.1.RELEASE/reference/html/#jpa.query-hints