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:
Jens Schauder
2020-01-13 15:55:01 +01:00
committed by Oliver Drotbohm
parent 95d4775be2
commit f9a2dba058
9 changed files with 62 additions and 120 deletions

View File

@@ -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.
*

View File

@@ -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 {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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" })

View File

@@ -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");
}
}

View File

@@ -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)));
}