package org.springframework.data.jpa.repository.support;
import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import javax.persistence.EntityManager;
/**
* QueryHints provides access to query hints defined via {@link CrudMethodMetadata#getQueryHints()} by default excluding
* JPA {@link javax.persistence.EntityGraph}.
*
* @author Christoph Strobl
* @author Oliver Gierke
* @since 2.0
*/
interface QueryHints extends Iterable<Entry<String, Object>> {
/**
* Creates and returns a new {@link QueryHints} instance including {@link javax.persistence.EntityGraph}.
*
* @param em must not be {@literal null}.
* @return new instance of {@link QueryHints}.
*/
QueryHints withFetchGraphs(EntityManager em);
/**
* Get the query hints as a {@link Map}.
*
* @return never {@literal null}.
*/
Map<String, Object> asMap();
/**
* Null object implementation of {@link QueryHints}.
*
* @author Oliver Gierke
* @since 2.0
*/
static enum NoHints implements QueryHints {
INSTANCE;
/*
* (non-Javadoc)
* @see org.springframework.data.jpa.repository.support.QueryHints#asMap()
*/
@Override
public Map<String, Object> asMap() {
return Collections.emptyMap();
}
/*
* (non-Javadoc)
* @see java.lang.Iterable#iterator()
*/
@Override
public Iterator<Entry<String, Object>> iterator() {
return Collections.emptyIterator();
}
/*
* (non-Javadoc)
* @see org.springframework.data.jpa.repository.support.QueryHints#withFetchGraphs(javax.persistence.EntityManager)
*/
@Override
public QueryHints withFetchGraphs(EntityManager em) {
return this;
}
}
}