DATAJPA-1663 - Removes superfluous method from PersistenceProvider.
PersistenceProvider.potentiallyConvertEmptyCollection(…) is no longer necessary. The single relevant implementation got inlined in the single usage location. This in turn made a bunch of PersistenceProvider passing around superfluous which in turn get removed as well. Original pull request: #408. Signed-off-by: Jens Schauder <jschauder@pivotal.io>
This commit is contained in:
committed by
Oliver Drotbohm
parent
95d4775be2
commit
f9a2dba058
@@ -18,7 +18,6 @@ package org.springframework.data.jpa.provider;
|
||||
import static org.springframework.data.jpa.provider.JpaClassUtils.*;
|
||||
import static org.springframework.data.jpa.provider.PersistenceProvider.Constants.*;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
@@ -94,16 +93,6 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor {
|
||||
return ((HibernateProxy) entity).getHibernateLazyInitializer().getIdentifier();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.jpa.provider.PersistenceProvider#potentiallyConvertEmptyCollection(java.util.Collection)
|
||||
*/
|
||||
@Nullable
|
||||
@Override
|
||||
public <T> Collection<T> potentiallyConvertEmptyCollection(@Nullable Collection<T> collection) {
|
||||
return collection == null || collection.isEmpty() ? null : collection;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.jpa.provider.PersistenceProvider#executeQueryWithResultStream(javax.persistence.Query)
|
||||
@@ -144,16 +133,6 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor {
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.jpa.provider.PersistenceProvider#potentiallyConvertEmptyCollection(java.util.Collection)
|
||||
*/
|
||||
@Nullable
|
||||
@Override
|
||||
public <T> Collection<T> potentiallyConvertEmptyCollection(@Nullable Collection<T> collection) {
|
||||
return collection == null || collection.isEmpty() ? null : collection;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see org.springframework.data.jpa.provider.PersistenceProvider#executeQueryWithResultStream(javax.persistence.Query)
|
||||
@@ -209,7 +188,8 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor {
|
||||
};
|
||||
|
||||
static ConcurrentReferenceHashMap<Class<?>, PersistenceProvider> CACHE = new ConcurrentReferenceHashMap<>();
|
||||
|
||||
private final Iterable<String> entityManagerClassNames;
|
||||
private final Iterable<String> metamodelClassNames;
|
||||
/**
|
||||
* Creates a new {@link PersistenceProvider}.
|
||||
*
|
||||
@@ -223,9 +203,6 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor {
|
||||
this.metamodelClassNames = metamodelClassNames;
|
||||
}
|
||||
|
||||
private final Iterable<String> entityManagerClassNames;
|
||||
private final Iterable<String> metamodelClassNames;
|
||||
|
||||
/**
|
||||
* Caches the given {@link PersistenceProvider} for the given source type.
|
||||
*
|
||||
@@ -314,19 +291,6 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Potentially converts an empty collection to the appropriate representation of this {@link PersistenceProvider},
|
||||
* since some JPA providers cannot correctly handle empty collections.
|
||||
*
|
||||
* @see <a href="https://jira.spring.io/browse/DATAJPA-606">DATAJPA-606</a>
|
||||
* @param collection The collection to be converted. May be {@code null}.
|
||||
* @return a potentially converted collection. May be {@code null}.
|
||||
*/
|
||||
@Nullable
|
||||
public <T> Collection<T> potentiallyConvertEmptyCollection(@Nullable Collection<T> collection) {
|
||||
return collection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds the PersistenceProvider specific interface names.
|
||||
*
|
||||
|
||||
@@ -19,7 +19,6 @@ import java.lang.reflect.Method;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import org.springframework.data.jpa.provider.PersistenceProvider;
|
||||
import org.springframework.data.jpa.provider.QueryExtractor;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.projection.ProjectionFactory;
|
||||
@@ -95,20 +94,19 @@ public final class JpaQueryLookupStrategy {
|
||||
*/
|
||||
private static class CreateQueryLookupStrategy extends AbstractQueryLookupStrategy {
|
||||
|
||||
private final PersistenceProvider persistenceProvider;
|
||||
private final EscapeCharacter escape;
|
||||
|
||||
public CreateQueryLookupStrategy(EntityManager em, QueryExtractor extractor, EscapeCharacter escape,
|
||||
JpaQueryMethodFactory queryMethodFactory) {
|
||||
|
||||
super(em, extractor, queryMethodFactory);
|
||||
this.persistenceProvider = PersistenceProvider.fromEntityManager(em);
|
||||
|
||||
this.escape = escape;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RepositoryQuery resolveQuery(JpaQueryMethod method, EntityManager em, NamedQueries namedQueries) {
|
||||
return new PartTreeJpaQuery(method, em, persistenceProvider, escape);
|
||||
return new PartTreeJpaQuery(method, em, escape);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,6 +116,7 @@ public final class JpaQueryLookupStrategy {
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author Thomas Darimont
|
||||
* @author Jens Schauder
|
||||
*/
|
||||
private static class DeclaredQueryLookupStrategy extends AbstractQueryLookupStrategy {
|
||||
|
||||
|
||||
@@ -57,22 +57,19 @@ class ParameterMetadataProvider {
|
||||
private final Iterator<? extends Parameter> parameters;
|
||||
private final List<ParameterMetadata<?>> expressions;
|
||||
private final @Nullable Iterator<Object> bindableParameterValues;
|
||||
private final PersistenceProvider persistenceProvider;
|
||||
private final EscapeCharacter escape;
|
||||
|
||||
/**
|
||||
* Creates a new {@link ParameterMetadataProvider} from the given {@link CriteriaBuilder} and
|
||||
* {@link ParametersParameterAccessor} with support for parameter value customizations via {@link PersistenceProvider}
|
||||
* .
|
||||
* {@link ParametersParameterAccessor}.
|
||||
*
|
||||
* @param builder must not be {@literal null}.
|
||||
* @param accessor must not be {@literal null}.
|
||||
* @param provider must not be {@literal null}.
|
||||
* @param escape
|
||||
* @param escape must not be {@literal null}.
|
||||
*/
|
||||
public ParameterMetadataProvider(CriteriaBuilder builder, ParametersParameterAccessor accessor,
|
||||
PersistenceProvider provider, EscapeCharacter escape) {
|
||||
this(builder, accessor.iterator(), accessor.getParameters(), provider, escape);
|
||||
EscapeCharacter escape) {
|
||||
this(builder, accessor.iterator(), accessor.getParameters(), escape);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -81,37 +78,32 @@ class ParameterMetadataProvider {
|
||||
*
|
||||
* @param builder must not be {@literal null}.
|
||||
* @param parameters must not be {@literal null}.
|
||||
* @param provider must not be {@literal null}.
|
||||
* @param escape
|
||||
* @param escape must not be {@literal null}.
|
||||
*/
|
||||
public ParameterMetadataProvider(CriteriaBuilder builder, Parameters<?, ?> parameters, PersistenceProvider provider,
|
||||
EscapeCharacter escape) {
|
||||
this(builder, null, parameters, provider, escape);
|
||||
public ParameterMetadataProvider(CriteriaBuilder builder, Parameters<?, ?> parameters, EscapeCharacter escape) {
|
||||
this(builder, null, parameters, escape);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link ParameterMetadataProvider} from the given {@link CriteriaBuilder} an {@link Iterable} of all
|
||||
* bindable parameter values, and {@link Parameters} with support for parameter value customizations via
|
||||
* {@link PersistenceProvider}.
|
||||
* bindable parameter values, and {@link Parameters}.
|
||||
*
|
||||
* @param builder must not be {@literal null}.
|
||||
* @param bindableParameterValues may be {@literal null}.
|
||||
* @param parameters must not be {@literal null}.
|
||||
* @param provider must not be {@literal null}.
|
||||
* @param escape
|
||||
* @param escape must not be {@literal null}.
|
||||
*/
|
||||
private ParameterMetadataProvider(CriteriaBuilder builder, @Nullable Iterator<Object> bindableParameterValues,
|
||||
Parameters<?, ?> parameters, PersistenceProvider provider, EscapeCharacter escape) {
|
||||
Parameters<?, ?> parameters, EscapeCharacter escape) {
|
||||
|
||||
Assert.notNull(builder, "CriteriaBuilder must not be null!");
|
||||
Assert.notNull(parameters, "Parameters must not be null!");
|
||||
Assert.notNull(provider, "PesistenceProvider must not be null!");
|
||||
Assert.notNull(escape, "EscapeCharacter must not be null!");
|
||||
|
||||
this.builder = builder;
|
||||
this.parameters = parameters.getBindableParameters().iterator();
|
||||
this.expressions = new ArrayList<>();
|
||||
this.bindableParameterValues = bindableParameterValues;
|
||||
this.persistenceProvider = provider;
|
||||
this.escape = escape;
|
||||
}
|
||||
|
||||
@@ -140,7 +132,7 @@ class ParameterMetadataProvider {
|
||||
* Builds a new {@link ParameterMetadata} of the given {@link Part} and type. Forwards the underlying
|
||||
* {@link Parameters} as well.
|
||||
*
|
||||
* @param <T> is the type parameter of the returend {@link ParameterMetadata}.
|
||||
* @param <T> is the type parameter of the returned {@link ParameterMetadata}.
|
||||
* @param type must not be {@literal null}.
|
||||
* @return ParameterMetadata for the next parameter.
|
||||
*/
|
||||
@@ -180,7 +172,7 @@ class ParameterMetadataProvider {
|
||||
|
||||
Object value = bindableParameterValues == null ? ParameterMetadata.PLACEHOLDER : bindableParameterValues.next();
|
||||
|
||||
ParameterMetadata<T> metadata = new ParameterMetadata<>(expression, part, value, persistenceProvider, escape);
|
||||
ParameterMetadata<T> metadata = new ParameterMetadata<>(expression, part, value, escape);
|
||||
expressions.add(metadata);
|
||||
|
||||
return metadata;
|
||||
@@ -202,7 +194,6 @@ class ParameterMetadataProvider {
|
||||
|
||||
private final Type type;
|
||||
private final ParameterExpression<T> expression;
|
||||
private final PersistenceProvider persistenceProvider;
|
||||
private final EscapeCharacter escape;
|
||||
private final boolean ignoreCase;
|
||||
|
||||
@@ -210,10 +201,9 @@ class ParameterMetadataProvider {
|
||||
* Creates a new {@link ParameterMetadata}.
|
||||
*/
|
||||
public ParameterMetadata(ParameterExpression<T> expression, Part part, @Nullable Object value,
|
||||
PersistenceProvider provider, EscapeCharacter escape) {
|
||||
EscapeCharacter escape) {
|
||||
|
||||
this.expression = expression;
|
||||
this.persistenceProvider = provider;
|
||||
this.type = value == null && Type.SIMPLE_PROPERTY.equals(part.getType()) ? Type.IS_NULL : part.getType();
|
||||
this.ignoreCase = IgnoreCaseType.ALWAYS.equals(part.shouldIgnoreCase());
|
||||
this.escape = escape;
|
||||
@@ -263,7 +253,7 @@ class ParameterMetadataProvider {
|
||||
}
|
||||
|
||||
return Collection.class.isAssignableFrom(expressionType) //
|
||||
? persistenceProvider.potentiallyConvertEmptyCollection(upperIfIgnoreCase(ignoreCase, toCollection(value))) //
|
||||
? upperIfIgnoreCase(ignoreCase, toCollection(value)) //
|
||||
: value;
|
||||
}
|
||||
|
||||
@@ -283,11 +273,15 @@ class ParameterMetadataProvider {
|
||||
}
|
||||
|
||||
if (value instanceof Collection) {
|
||||
return (Collection<?>) value;
|
||||
|
||||
Collection<?> collection = (Collection<?>) value;
|
||||
return collection.isEmpty() ? null : collection;
|
||||
}
|
||||
|
||||
if (ObjectUtils.isArray(value)) {
|
||||
return Arrays.asList(ObjectUtils.toObjectArray(value));
|
||||
|
||||
List<Object> collection = Arrays.asList(ObjectUtils.toObjectArray(value));
|
||||
return collection.isEmpty() ? null : collection;
|
||||
}
|
||||
|
||||
return Collections.singleton(value);
|
||||
|
||||
@@ -24,7 +24,6 @@ import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaQuery;
|
||||
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.provider.PersistenceProvider;
|
||||
import org.springframework.data.jpa.repository.query.JpaParameters.JpaParameter;
|
||||
import org.springframework.data.jpa.repository.query.JpaQueryExecution.DeleteExecution;
|
||||
import org.springframework.data.jpa.repository.query.JpaQueryExecution.ExistsExecution;
|
||||
@@ -62,10 +61,9 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
*
|
||||
* @param method must not be {@literal null}.
|
||||
* @param em must not be {@literal null}.
|
||||
* @param persistenceProvider must not be {@literal null}.
|
||||
*/
|
||||
PartTreeJpaQuery(JpaQueryMethod method, EntityManager em, PersistenceProvider persistenceProvider) {
|
||||
this(method, em, persistenceProvider, EscapeCharacter.DEFAULT);
|
||||
PartTreeJpaQuery(JpaQueryMethod method, EntityManager em) {
|
||||
this(method, em, EscapeCharacter.DEFAULT);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -73,11 +71,9 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
*
|
||||
* @param method must not be {@literal null}.
|
||||
* @param em must not be {@literal null}.
|
||||
* @param persistenceProvider must not be {@literal null}.
|
||||
* @param escape character used for escaping characters used as patterns in LIKE-expressions.
|
||||
*/
|
||||
PartTreeJpaQuery(JpaQueryMethod method, EntityManager em, PersistenceProvider persistenceProvider,
|
||||
EscapeCharacter escape) {
|
||||
PartTreeJpaQuery(JpaQueryMethod method, EntityManager em, EscapeCharacter escape) {
|
||||
|
||||
super(method, em);
|
||||
|
||||
@@ -92,8 +88,8 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
|
||||
this.tree = new PartTree(method.getName(), domainClass);
|
||||
validate(tree, parameters, method.toString());
|
||||
this.countQuery = new CountQueryPreparer(persistenceProvider, recreationRequired);
|
||||
this.query = tree.isCountProjection() ? countQuery : new QueryPreparer(persistenceProvider, recreationRequired);
|
||||
this.countQuery = new CountQueryPreparer(recreationRequired);
|
||||
this.query = tree.isCountProjection() ? countQuery : new QueryPreparer(recreationRequired);
|
||||
|
||||
} catch (Exception o_O) {
|
||||
throw new IllegalArgumentException(
|
||||
@@ -208,14 +204,11 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
|
||||
private final @Nullable CriteriaQuery<?> cachedCriteriaQuery;
|
||||
private final @Nullable ParameterBinder cachedParameterBinder;
|
||||
private final PersistenceProvider persistenceProvider;
|
||||
private final QueryParameterSetter.QueryMetadataCache metadataCache = new QueryParameterSetter.QueryMetadataCache();
|
||||
|
||||
QueryPreparer(PersistenceProvider persistenceProvider, boolean recreateQueries) {
|
||||
QueryPreparer(boolean recreateQueries) {
|
||||
|
||||
this.persistenceProvider = persistenceProvider;
|
||||
|
||||
JpaQueryCreator creator = createCreator(persistenceProvider, null);
|
||||
JpaQueryCreator creator = createCreator(null);
|
||||
|
||||
if (recreateQueries) {
|
||||
this.cachedCriteriaQuery = null;
|
||||
@@ -235,7 +228,7 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
ParameterBinder parameterBinder = cachedParameterBinder;
|
||||
|
||||
if (cachedCriteriaQuery == null || accessor.hasBindableNullValue()) {
|
||||
JpaQueryCreator creator = createCreator(persistenceProvider, accessor);
|
||||
JpaQueryCreator creator = createCreator(accessor);
|
||||
criteriaQuery = creator.createQuery(getDynamicSort(accessor));
|
||||
List<ParameterMetadata<?>> expressions = creator.getParameterExpressions();
|
||||
parameterBinder = getBinder(expressions);
|
||||
@@ -254,6 +247,7 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
* Restricts the max results of the given {@link Query} if the current {@code tree} marks this {@code query} as
|
||||
* limited.
|
||||
*/
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private Query restrictMaxResultsIfNecessary(Query query) {
|
||||
|
||||
if (tree.isLimiting()) {
|
||||
@@ -298,8 +292,7 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
return getEntityManager().createQuery(criteriaQuery);
|
||||
}
|
||||
|
||||
protected JpaQueryCreator createCreator(PersistenceProvider persistenceProvider,
|
||||
@Nullable JpaParametersParameterAccessor accessor) {
|
||||
protected JpaQueryCreator createCreator(@Nullable JpaParametersParameterAccessor accessor) {
|
||||
|
||||
EntityManager entityManager = getEntityManager();
|
||||
|
||||
@@ -310,10 +303,10 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
ReturnedType returnedType;
|
||||
|
||||
if (accessor != null) {
|
||||
provider = new ParameterMetadataProvider(builder, accessor, persistenceProvider, escape);
|
||||
provider = new ParameterMetadataProvider(builder, accessor, escape);
|
||||
returnedType = processor.withDynamicProjection(accessor).getReturnedType();
|
||||
} else {
|
||||
provider = new ParameterMetadataProvider(builder, parameters, persistenceProvider, escape);
|
||||
provider = new ParameterMetadataProvider(builder, parameters, escape);
|
||||
returnedType = processor.getReturnedType();
|
||||
}
|
||||
|
||||
@@ -351,13 +344,12 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
*/
|
||||
private class CountQueryPreparer extends QueryPreparer {
|
||||
|
||||
CountQueryPreparer(PersistenceProvider persistenceProvider, boolean recreateQueries) {
|
||||
super(persistenceProvider, recreateQueries);
|
||||
CountQueryPreparer(boolean recreateQueries) {
|
||||
super(recreateQueries);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JpaQueryCreator createCreator(PersistenceProvider persistenceProvider,
|
||||
@Nullable JpaParametersParameterAccessor accessor) {
|
||||
protected JpaQueryCreator createCreator(@Nullable JpaParametersParameterAccessor accessor) {
|
||||
|
||||
EntityManager entityManager = getEntityManager();
|
||||
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
|
||||
@@ -365,9 +357,9 @@ public class PartTreeJpaQuery extends AbstractJpaQuery {
|
||||
ParameterMetadataProvider provider;
|
||||
|
||||
if (accessor != null) {
|
||||
provider = new ParameterMetadataProvider(builder, accessor, persistenceProvider, escape);
|
||||
provider = new ParameterMetadataProvider(builder, accessor, escape);
|
||||
} else {
|
||||
provider = new ParameterMetadataProvider(builder, parameters, persistenceProvider, escape);
|
||||
provider = new ParameterMetadataProvider(builder, parameters, escape);
|
||||
}
|
||||
|
||||
return new JpaCountQueryCreator(tree, getQueryMethod().getResultProcessor().getReturnedType(), builder, provider);
|
||||
|
||||
@@ -60,7 +60,7 @@ public class JpaCountQueryCreatorIntegrationTests {
|
||||
|
||||
PartTree tree = new PartTree("findDistinctByRolesIn", User.class);
|
||||
ParameterMetadataProvider metadataProvider = new ParameterMetadataProvider(entityManager.getCriteriaBuilder(),
|
||||
queryMethod.getParameters(), provider, EscapeCharacter.DEFAULT);
|
||||
queryMethod.getParameters(), EscapeCharacter.DEFAULT);
|
||||
|
||||
JpaCountQueryCreator creator = new JpaCountQueryCreator(tree, queryMethod.getResultProcessor().getReturnedType(),
|
||||
entityManager.getCriteriaBuilder(), metadataProvider);
|
||||
|
||||
@@ -27,7 +27,6 @@ import javax.persistence.criteria.ParameterExpression;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.data.jpa.domain.sample.User;
|
||||
import org.springframework.data.jpa.provider.PersistenceProvider;
|
||||
import org.springframework.data.repository.query.DefaultParameters;
|
||||
import org.springframework.data.repository.query.Parameters;
|
||||
import org.springframework.data.repository.query.ParametersParameterAccessor;
|
||||
@@ -57,10 +56,9 @@ public class ParameterExpressionProviderTests {
|
||||
Part part = new Part("IdGreaterThan", User.class);
|
||||
|
||||
CriteriaBuilder builder = em.getCriteriaBuilder();
|
||||
PersistenceProvider persistenceProvider = PersistenceProvider.fromEntityManager(em);
|
||||
ParameterMetadataProvider provider = new ParameterMetadataProvider(builder, accessor, persistenceProvider,
|
||||
EscapeCharacter.DEFAULT);
|
||||
ParameterMetadataProvider provider = new ParameterMetadataProvider(builder, accessor, EscapeCharacter.DEFAULT);
|
||||
ParameterExpression<? extends Comparable> expression = provider.next(part, Comparable.class).getExpression();
|
||||
|
||||
assertThat(expression.getParameterType()).isEqualTo(int.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import javax.persistence.PersistenceContext;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.data.jpa.domain.sample.User;
|
||||
import org.springframework.data.jpa.provider.PersistenceProvider;
|
||||
import org.springframework.data.jpa.repository.query.ParameterMetadataProvider.ParameterMetadata;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
import org.springframework.data.repository.query.Parameters;
|
||||
@@ -80,8 +79,7 @@ public class ParameterMetadataProviderIntegrationTests {
|
||||
JpaParameters parameters = new JpaParameters(method);
|
||||
simulateDiscoveredParametername(parameters);
|
||||
|
||||
return new ParameterMetadataProvider(em.getCriteriaBuilder(), parameters,
|
||||
PersistenceProvider.fromEntityManager(em), EscapeCharacter.DEFAULT);
|
||||
return new ParameterMetadataProvider(em.getCriteriaBuilder(), parameters, EscapeCharacter.DEFAULT);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "ConstantConditions" })
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.util.Collections;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.data.jpa.provider.PersistenceProvider;
|
||||
import org.springframework.data.repository.query.Parameters;
|
||||
import org.springframework.data.repository.query.parser.Part;
|
||||
|
||||
@@ -37,18 +36,17 @@ public class ParameterMetadataProviderUnitTests {
|
||||
@Test // DATAJPA-863
|
||||
public void errorMessageMentionesParametersWhenParametersAreExhausted() {
|
||||
|
||||
PersistenceProvider persistenceProvider = mock(PersistenceProvider.class);
|
||||
CriteriaBuilder builder = mock(CriteriaBuilder.class);
|
||||
|
||||
Parameters<?, ?> parameters = mock(Parameters.class, RETURNS_DEEP_STUBS);
|
||||
when(parameters.getBindableParameters().iterator()).thenReturn(Collections.emptyListIterator());
|
||||
|
||||
ParameterMetadataProvider metadataProvider = new ParameterMetadataProvider(builder, parameters,
|
||||
persistenceProvider, EscapeCharacter.DEFAULT);
|
||||
EscapeCharacter.DEFAULT);
|
||||
|
||||
assertThatExceptionOfType(RuntimeException.class) //
|
||||
.isThrownBy(() -> metadataProvider.next(mock(Part.class))) //
|
||||
.withMessageContaining("parameter");
|
||||
.withMessageContaining("parameter");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void test() throws Exception {
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod("findByFirstname", String.class, Pageable.class);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager, provider);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
|
||||
jpaQuery.createQuery(getAccessor(queryMethod, new Object[] { "Matthews", PageRequest.of(0, 1) }));
|
||||
jpaQuery.createQuery((getAccessor(queryMethod, new Object[] { "Matthews", PageRequest.of(0, 1) })));
|
||||
@@ -106,7 +106,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void recreatesQueryIfNullValueIsGiven() throws Exception {
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod("findByFirstname", String.class, Pageable.class);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager, provider);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
|
||||
Query query = jpaQuery.createQuery((getAccessor(queryMethod, new Object[] { "Matthews", PageRequest.of(0, 1) })));
|
||||
|
||||
@@ -121,7 +121,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void shouldLimitExistsProjectionQueries() throws Exception {
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod("existsByFirstname", String.class);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager, provider);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
|
||||
Query query = jpaQuery.createQuery((getAccessor(queryMethod, new Object[] { "Matthews" })));
|
||||
|
||||
@@ -132,7 +132,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void shouldSelectAliasedIdForExistsProjectionQueries() throws Exception {
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod("existsByFirstname", String.class);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager, provider);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
|
||||
Query query = jpaQuery.createQuery((getAccessor(queryMethod, new Object[] { "Matthews" })));
|
||||
|
||||
@@ -143,7 +143,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void isEmptyCollection() throws Exception {
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod("findByRolesIsEmpty");
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager, provider);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
|
||||
Query query = jpaQuery.createQuery((getAccessor(queryMethod, new Object[] {})));
|
||||
|
||||
@@ -154,7 +154,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void isNotEmptyCollection() throws Exception {
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod("findByRolesIsNotEmpty");
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager, provider);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
|
||||
Query query = jpaQuery.createQuery((getAccessor(queryMethod, new Object[] {})));
|
||||
|
||||
@@ -165,7 +165,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
public void rejectsIsEmptyOnNonCollectionProperty() throws Exception {
|
||||
|
||||
JpaQueryMethod method = getQueryMethod("findByFirstnameIsEmpty");
|
||||
AbstractJpaQuery jpaQuery = new PartTreeJpaQuery(method, entityManager, provider);
|
||||
AbstractJpaQuery jpaQuery = new PartTreeJpaQuery(method, entityManager);
|
||||
|
||||
jpaQuery.createQuery((getAccessor(method, new Object[] { "Oliver" })));
|
||||
}
|
||||
@@ -176,7 +176,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
JpaQueryMethod method = getQueryMethod("findByIdIn", Integer.class);
|
||||
|
||||
assertThatExceptionOfType(RuntimeException.class) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager, provider)) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager)) //
|
||||
.withMessageContaining("findByIdIn") //
|
||||
.withMessageContaining(" IN ") //
|
||||
.withMessageContaining("Collection") //
|
||||
@@ -189,7 +189,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
JpaQueryMethod method = getQueryMethod("findById", Collection.class);
|
||||
|
||||
assertThatExceptionOfType(RuntimeException.class) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager, provider)) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager)) //
|
||||
.withMessageContaining("findById") //
|
||||
.withMessageContaining(" SIMPLE_PROPERTY ") //
|
||||
.withMessageContaining(" scalar ") //
|
||||
@@ -201,7 +201,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
|
||||
JpaQueryMethod method = getQueryMethod("findByFirstnameIn", Iterable.class);
|
||||
|
||||
new PartTreeJpaQuery(method, entityManager, provider);
|
||||
new PartTreeJpaQuery(method, entityManager);
|
||||
|
||||
assertThat(method).isNotNull();
|
||||
}
|
||||
@@ -212,7 +212,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
JpaQueryMethod method = getQueryMethod("findByFirstname");
|
||||
|
||||
assertThatExceptionOfType(IllegalArgumentException.class) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager, provider)) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager)) //
|
||||
.withMessageContaining("findByFirstname") // the method being analyzed
|
||||
.withMessageContaining(" firstname ") // the property we are looking for
|
||||
.withMessageContaining("UserRepository"); // the repository
|
||||
@@ -224,7 +224,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
JpaQueryMethod method = getQueryMethod("findByNoSuchProperty", String.class);
|
||||
|
||||
assertThatExceptionOfType(IllegalArgumentException.class) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager, provider)) //
|
||||
.isThrownBy(() -> new PartTreeJpaQuery(method, entityManager)) //
|
||||
.withMessageContaining("findByNoSuchProperty") // the method being analyzed
|
||||
.withMessageContaining(" noSuchProperty ") // the property we are looking for
|
||||
.withMessageContaining("UserRepository"); // the repository
|
||||
@@ -239,8 +239,7 @@ public class PartTreeJpaQueryIntegrationTests {
|
||||
}
|
||||
|
||||
JpaQueryMethod queryMethod = getQueryMethod(methodName, parameterTypes);
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager,
|
||||
PersistenceProvider.fromEntityManager(entityManager));
|
||||
PartTreeJpaQuery jpaQuery = new PartTreeJpaQuery(queryMethod, entityManager);
|
||||
jpaQuery.createQuery((getAccessor(queryMethod, values)));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user