@Override protected RepositoryQuery resolveQuery(JpaQueryMethod method, EntityManager em, NamedQueries namedQueries) { RepositoryQuery query = JpaQueryFactory.INSTANCE.fromQueryAnnotation(method, em, evaluationContextProvider); if (null != query) { return query; } query = JpaQueryFactory.INSTANCE.fromProcedureAnnotation(method, em); if (null != query) { return query; } String name = method.getNamedQueryName(); if (namedQueries.hasQuery(name)) { return JpaQueryFactory.INSTANCE.fromMethodWithQueryString(method, em, namedQueries.getQuery(name), evaluationContextProvider); } query = NamedQuery.lookupFrom(method, em); if (null != query) { return query; } throw new IllegalStateException( String.format("Did neither find a NamedQuery nor an annotated query for method %s!", method)); } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { ReactiveElasticsearchQueryMethod queryMethod = new ReactiveElasticsearchQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new ReactiveElasticsearchStringQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new ReactiveElasticsearchStringQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new ReactivePartTreeElasticsearchQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedMongoQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedMongoQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new PartTreeMongoQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { ReactiveMongoQueryMethod queryMethod = new ReactiveMongoQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new ReactiveStringBasedMongoQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new ReactiveStringBasedMongoQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new ReactivePartTreeMongoQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedMongoQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedMongoQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new PartTreeMongoQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { ReactiveMongoQueryMethod queryMethod = new ReactiveMongoQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new ReactiveStringBasedMongoQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new ReactiveStringBasedMongoQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new ReactivePartTreeMongoQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { GraphQueryMethod queryMethod = new GraphQueryMethod(method, metadata, factory); queryMethod.setMappingContext(this.mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String cypherQuery = namedQueries.getQuery(namedQueryName); return new NamedGraphRepositoryQuery(queryMethod, metaData, session, cypherQuery, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new GraphRepositoryQuery(queryMethod, metaData, session, evaluationContextProvider); } else { return new PartTreeNeo4jQuery(queryMethod, metaData, session); } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { R2dbcQueryMethod queryMethod = new R2dbcQueryMethod(method, metadata, factory, converter.getMappingContext()); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedR2dbcQuery(namedQuery, queryMethod, databaseClient, converter, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedR2dbcQuery(queryMethod, databaseClient, converter, EXPRESSION_PARSER, evaluationContextProvider); } throw new UnsupportedOperationException("Query derivation not yet supported!"); } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { R2dbcQueryMethod queryMethod = new R2dbcQueryMethod(method, metadata, factory, converter.getMappingContext()); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedR2dbcQuery(namedQuery, queryMethod, databaseClient, converter, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedR2dbcQuery(queryMethod, databaseClient, converter, EXPRESSION_PARSER, evaluationContextProvider); } throw new UnsupportedOperationException("Query derivation not yet supported!"); } }
@Override public RepositoryQuery resolveQuery( final Method method, final RepositoryMetadata metadata, final ProjectionFactory factory, final NamedQueries namedQueries) { final ArangoQueryMethod queryMethod = new ArangoQueryMethod(method, metadata, factory); final String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { final String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedArangoQuery(namedQuery, queryMethod, operations); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedArangoQuery(queryMethod, operations); } else { return new DerivedArangoQuery(queryMethod, operations); } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { CassandraQueryMethod queryMethod = new CassandraQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedCassandraQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedCassandraQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new PartTreeCassandraQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { ReactiveCassandraQueryMethod queryMethod = new ReactiveCassandraQueryMethod(method, metadata, factory, mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new ReactiveStringBasedCassandraQuery(namedQuery, queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new ReactiveStringBasedCassandraQuery(queryMethod, operations, EXPRESSION_PARSER, evaluationContextProvider); } else { return new ReactivePartTreeCassandraQuery(queryMethod, operations); } } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, NamedQueries namedQueries) { ElasticsearchQueryMethod queryMethod = new ElasticsearchQueryMethod(method, metadata, entityInformationCreator); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new ElasticsearchStringQuery(queryMethod, elasticsearchOperations, namedQuery); } else if (queryMethod.hasAnnotatedQuery()) { return new ElasticsearchStringQuery(queryMethod, elasticsearchOperations, queryMethod.getAnnotatedQuery()); } return new ElasticsearchPartQuery(queryMethod, elasticsearchOperations); } }
@Override protected Optional<QueryLookupStrategy> getQueryLookupStrategy(Key key, QueryMethodEvaluationContextProvider evaluationContextProvider) { return Optional.of((Method method, RepositoryMetadata repositoryMetadata, ProjectionFactory projectionFactory, NamedQueries namedQueries) -> { GemfireQueryMethod queryMethod = newQueryMethod(method, repositoryMetadata, projectionFactory, evaluationContextProvider); GemfireTemplate template = newTemplate(repositoryMetadata); if (queryMethod.hasAnnotatedQuery()) { return new StringBasedGemfireRepositoryQuery(queryMethod, template).asUserDefinedQuery(); } String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { return new StringBasedGemfireRepositoryQuery(namedQueries.getQuery(namedQueryName), queryMethod, template).asUserDefinedQuery(); } return new PartTreeGemfireRepositoryQuery(queryMethod, template); }); }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { GraphQueryMethod queryMethod = new GraphQueryMethod(method, metadata, factory); queryMethod.setMappingContext(this.mappingContext); String namedQueryName = queryMethod.getNamedQueryName(); if (namedQueries.hasQuery(namedQueryName)) { String cypherQuery = namedQueries.getQuery(namedQueryName); return new NamedGraphRepositoryQuery(queryMethod, metaData, session, cypherQuery, evaluationContextProvider); } else if (queryMethod.hasAnnotatedQuery()) { return new GraphRepositoryQuery(queryMethod, metaData, session, evaluationContextProvider); } else { return new PartTreeNeo4jQuery(queryMethod, metaData, session); } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { SolrQueryMethod queryMethod = new SolrQueryMethod(method, metadata, factory, entityInformationCreator); String namedQueryName = queryMethod.getNamedQueryName(); String collectionName = getEntityInformation(metadata.getDomainType()).getCollectionName(); SolrOperations solrOperations = selectSolrOperations(metadata); if (namedQueries.hasQuery(namedQueryName)) { String namedQuery = namedQueries.getQuery(namedQueryName); return new StringBasedSolrQuery(collectionName, namedQuery, queryMethod, solrOperations); } else if (queryMethod.hasAnnotatedQuery()) { return new StringBasedSolrQuery(collectionName, queryMethod, solrOperations); } else { return new PartTreeSolrQuery(collectionName, queryMethod, solrOperations); } }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { DatastoreQueryMethod queryMethod = createQueryMethod(method, metadata, factory); Class<?> entityType = getEntityType(queryMethod); if (queryMethod.hasAnnotatedQuery()) { String sql = queryMethod.getQueryAnnotation().value(); return createGqlDatastoreQuery(entityType, queryMethod, sql); } else if (namedQueries.hasQuery(queryMethod.getNamedQueryName())) { String sql = namedQueries.getQuery(queryMethod.getNamedQueryName()); return createGqlDatastoreQuery(entityType, queryMethod, sql); } return new PartTreeDatastoreQuery<>(queryMethod, this.datastoreTemplate, this.datastoreMappingContext, entityType); }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { DatastoreQueryMethod queryMethod = createQueryMethod(method, metadata, factory); Class<?> entityType = getEntityType(queryMethod); if (queryMethod.hasAnnotatedQuery()) { String sql = queryMethod.getQueryAnnotation().value(); return createGqlDatastoreQuery(entityType, queryMethod, sql); } else if (namedQueries.hasQuery(queryMethod.getNamedQueryName())) { String sql = namedQueries.getQuery(queryMethod.getNamedQueryName()); return createGqlDatastoreQuery(entityType, queryMethod, sql); } return new PartTreeDatastoreQuery<>(queryMethod, this.datastoreTemplate, this.datastoreMappingContext, entityType); }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { SpannerQueryMethod queryMethod = createQueryMethod(method, metadata, factory); Class<?> entityType = getEntityType(queryMethod); boolean isDml = queryMethod.getQueryAnnotation() != null && queryMethod.getQueryAnnotation().dmlStatement(); if (queryMethod.hasAnnotatedQuery()) { String sql = queryMethod.getQueryAnnotation().value(); return createSqlSpannerQuery(entityType, queryMethod, sql, isDml); } else if (namedQueries.hasQuery(queryMethod.getNamedQueryName())) { String sql = namedQueries.getQuery(queryMethod.getNamedQueryName()); return createSqlSpannerQuery(entityType, queryMethod, sql, isDml); } return createPartTreeSpannerQuery(entityType, queryMethod); }
@Override public RepositoryQuery resolveQuery(Method method, RepositoryMetadata metadata, ProjectionFactory factory, NamedQueries namedQueries) { SpannerQueryMethod queryMethod = createQueryMethod(method, metadata, factory); Class<?> entityType = getEntityType(queryMethod); boolean isDml = queryMethod.getQueryAnnotation() != null && queryMethod.getQueryAnnotation().dmlStatement(); if (queryMethod.hasAnnotatedQuery()) { String sql = queryMethod.getQueryAnnotation().value(); return createSqlSpannerQuery(entityType, queryMethod, sql, isDml); } else if (namedQueries.hasQuery(queryMethod.getNamedQueryName())) { String sql = namedQueries.getQuery(queryMethod.getNamedQueryName()); return createSqlSpannerQuery(entityType, queryMethod, sql, isDml); } return createPartTreeSpannerQuery(entityType, queryMethod); }