From 9eb309c495f4ee3ad37ed958c0880d7f2fdcccb6 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 7 Mar 2016 15:09:14 +0100 Subject: [PATCH] DATAREDIS-425 - Adapted to changes in Spring Data KeyValue APIs. Default query initialization changed to new, so we can delete some code here. Original Pull Request: #156 --- .../support/RedisRepositoryFactory.java | 84 +++---------------- .../support/RedisRepositoryFactoryBean.java | 11 +-- .../RedisRepositoryIntegrationTests.java | 3 + 3 files changed, 22 insertions(+), 76 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java b/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java index 8a1f111a3..0fa0dc191 100644 --- a/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java +++ b/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactory.java @@ -16,26 +16,17 @@ package org.springframework.data.redis.repository.support; import java.io.Serializable; -import java.lang.reflect.Method; import org.springframework.data.keyvalue.core.KeyValueOperations; import org.springframework.data.keyvalue.repository.query.KeyValuePartTreeQuery; -import org.springframework.data.keyvalue.repository.query.KeyValuePartTreeQuery.QueryInitialization; import org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactory; -import org.springframework.data.projection.ProjectionFactory; import org.springframework.data.redis.core.mapping.RedisPersistentEntity; import org.springframework.data.redis.repository.core.MappingRedisEntityInformation; +import org.springframework.data.redis.repository.query.RedisQueryCreator; import org.springframework.data.repository.core.EntityInformation; -import org.springframework.data.repository.core.NamedQueries; -import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.support.RepositoryFactorySupport; -import org.springframework.data.repository.query.EvaluationContextProvider; -import org.springframework.data.repository.query.QueryLookupStrategy; -import org.springframework.data.repository.query.QueryLookupStrategy.Key; -import org.springframework.data.repository.query.QueryMethod; import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.data.repository.query.parser.AbstractQueryCreator; -import org.springframework.util.Assert; /** * {@link RepositoryFactorySupport} specific of handing Redis @@ -48,14 +39,13 @@ import org.springframework.util.Assert; public class RedisRepositoryFactory extends KeyValueRepositoryFactory { private final KeyValueOperations operations; - private final Class> queryCreator; /** * @param keyValueOperations * @see KeyValueRepositoryFactory#KeyValueRepositoryFactory(KeyValueOperations) */ public RedisRepositoryFactory(KeyValueOperations keyValueOperations) { - this(keyValueOperations, DEFAULT_QUERY_CREATOR); + this(keyValueOperations, RedisQueryCreator.class); } /** @@ -65,19 +55,20 @@ public class RedisRepositoryFactory extends KeyValueRepositoryFactory { */ public RedisRepositoryFactory(KeyValueOperations keyValueOperations, Class> queryCreator) { - super(keyValueOperations, queryCreator); - - this.operations = keyValueOperations; - this.queryCreator = queryCreator; + this(keyValueOperations, queryCreator, KeyValuePartTreeQuery.class); } - /* - * (non-Javadoc) - * @see org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactory#getQueryLookupStrategy(org.springframework.data.repository.query.QueryLookupStrategy.Key, org.springframework.data.repository.query.EvaluationContextProvider) + /** + * @param keyValueOperations + * @param queryCreator + * @param repositoryQueryType + * @see KeyValueRepositoryFactory#KeyValueRepositoryFactory(KeyValueOperations, Class, Class) */ - @Override - protected QueryLookupStrategy getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { - return new RedisQueryLookupStrategy(key, evaluationContextProvider, operations, queryCreator); + public RedisRepositoryFactory(KeyValueOperations keyValueOperations, + Class> queryCreator, Class repositoryQueryType) { + super(keyValueOperations, queryCreator, repositoryQueryType); + + this.operations = keyValueOperations; } /* @@ -95,53 +86,4 @@ public class RedisRepositoryFactory extends KeyValueRepositoryFactory { return entityInformation; } - - /** - * @author Christoph Strobl - * @since 1.7 - */ - private static class RedisQueryLookupStrategy implements QueryLookupStrategy { - - private EvaluationContextProvider evaluationContextProvider; - private KeyValueOperations keyValueOperations; - - private Class> queryCreator; - - /** - * Creates a new {@link RedisQueryLookupStrategy} for the given {@link Key}, {@link EvaluationContextProvider}, - * {@link KeyValueOperations} and query creator type. - *

- * - * @param key - * @param evaluationContextProvider must not be {@literal null}. - * @param keyValueOperations must not be {@literal null}. - * @param queryCreator must not be {@literal null}. - */ - public RedisQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider, - KeyValueOperations keyValueOperations, Class> queryCreator) { - - Assert.notNull(evaluationContextProvider, "EvaluationContextProvider must not be null!"); - Assert.notNull(keyValueOperations, "KeyValueOperations must not be null!"); - Assert.notNull(queryCreator, "Query creator type must not be null!"); - - this.evaluationContextProvider = evaluationContextProvider; - this.keyValueOperations = keyValueOperations; - this.queryCreator = queryCreator; - } - - /* - * (non-Javadoc) - * @see org.springframework.data.repository.query.QueryLookupStrategy#resolveQuery(java.lang.reflect.Method, org.springframework.data.repository.core.RepositoryMetadata, org.springframework.data.repository.core.NamedQueries) - */ - @Override - public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, - NamedQueries namedQueries) { - - QueryMethod queryMethod = new QueryMethod(method, metadata, factory); - KeyValuePartTreeQuery partTreeQuery = new KeyValuePartTreeQuery(queryMethod, evaluationContextProvider, - this.keyValueOperations, this.queryCreator); - partTreeQuery.setQueryIntialization(QueryInitialization.NEW); - return partTreeQuery; - } - } } diff --git a/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactoryBean.java b/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactoryBean.java index b9275fd1c..3dcc8fb7b 100644 --- a/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactoryBean.java +++ b/src/main/java/org/springframework/data/redis/repository/support/RedisRepositoryFactoryBean.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.data.keyvalue.core.KeyValueOperations; import org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactoryBean; import org.springframework.data.repository.Repository; +import org.springframework.data.repository.query.RepositoryQuery; import org.springframework.data.repository.query.parser.AbstractQueryCreator; /** @@ -33,16 +34,16 @@ import org.springframework.data.repository.query.parser.AbstractQueryCreator; * @param The repository id type. * @since 1.7 */ -public class RedisRepositoryFactoryBean, S, ID extends Serializable> extends - KeyValueRepositoryFactoryBean { +public class RedisRepositoryFactoryBean, S, ID extends Serializable> + extends KeyValueRepositoryFactoryBean { /* * (non-Javadoc) - * @see org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactoryBean#createRepositoryFactory(org.springframework.data.keyvalue.core.KeyValueOperations, java.lang.Class) + * @see org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactoryBean#createRepositoryFactory(org.springframework.data.keyvalue.core.KeyValueOperations, java.lang.Class, java.lang.Class) */ @Override protected RedisRepositoryFactory createRepositoryFactory(KeyValueOperations operations, - Class> queryCreator) { - return new RedisRepositoryFactory(operations, queryCreator); + Class> queryCreator, Class repositoryQueryType) { + return new RedisRepositoryFactory(operations, queryCreator, repositoryQueryType); } } diff --git a/src/test/java/org/springframework/data/redis/repository/RedisRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/redis/repository/RedisRepositoryIntegrationTests.java index c64b46452..866190dc3 100644 --- a/src/test/java/org/springframework/data/redis/repository/RedisRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/repository/RedisRepositoryIntegrationTests.java @@ -115,6 +115,9 @@ public class RedisRepositoryIntegrationTests { assertThat(repo.findByFirstname("rand").size(), is(1)); assertThat(repo.findByFirstname("rand"), hasItem(rand)); + assertThat(repo.findByFirstname("egwene").size(), is(1)); + assertThat(repo.findByFirstname("egwene"), hasItem(egwene)); + assertThat(repo.findByLastname("al'thor"), hasItem(rand)); }