From 0d072ab114dcae7007b8d742925f0154f36ce9b8 Mon Sep 17 00:00:00 2001 From: Mohsin Husen Date: Wed, 3 Apr 2013 17:42:13 +0100 Subject: [PATCH] bug fix : custom repository methods should work with pageable request --- .../query/ElasticsearchPartQuery.java | 3 +- .../query/ElasticsearchStringQuery.java | 1 + .../data/elasticsearch/Book.java | 2 + .../CustomMethodRepositoryTest.java | 50 +++++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java index 89727b9cb..51af23511 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java @@ -47,7 +47,8 @@ public class ElasticsearchPartQuery extends AbstractElasticsearchRepositoryQuery ParametersParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters); CriteriaQuery query = createQuery(accessor); if(queryMethod.isPageQuery()){ - return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType()); + query.setPageable(accessor.getPageable()); + return elasticsearchOperations.queryForPage(query, queryMethod.getEntityInformation().getJavaType()); } return elasticsearchOperations.queryForObject(query, queryMethod.getEntityInformation().getJavaType()); } diff --git a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java index 0cf3523fb..d216ecc62 100644 --- a/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java +++ b/src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchStringQuery.java @@ -63,6 +63,7 @@ public class ElasticsearchStringQuery extends AbstractElasticsearchRepositoryQue ParametersParameterAccessor accessor = new ParametersParameterAccessor(queryMethod.getParameters(), parameters); StringQuery stringQuery = createQuery(accessor); if(queryMethod.isPageQuery()){ + stringQuery.setPageable(accessor.getPageable()); return elasticsearchOperations.queryForPage(stringQuery, queryMethod.getEntityInformation().getJavaType()); } return elasticsearchOperations.queryForObject(stringQuery, queryMethod.getEntityInformation().getJavaType()); diff --git a/src/test/java/org/springframework/data/elasticsearch/Book.java b/src/test/java/org/springframework/data/elasticsearch/Book.java index 9adfed6b4..c57655230 100644 --- a/src/test/java/org/springframework/data/elasticsearch/Book.java +++ b/src/test/java/org/springframework/data/elasticsearch/Book.java @@ -15,6 +15,7 @@ */ package org.springframework.data.elasticsearch; +import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; /** * @author Rizwan Idrees @@ -23,6 +24,7 @@ import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "book",type = "book") public class Book { + @Id private String id; private String name; private Author author; diff --git a/src/test/java/org/springframework/data/elasticsearch/repositories/CustomMethodRepositoryTest.java b/src/test/java/org/springframework/data/elasticsearch/repositories/CustomMethodRepositoryTest.java index 029b14f58..43842b421 100644 --- a/src/test/java/org/springframework/data/elasticsearch/repositories/CustomMethodRepositoryTest.java +++ b/src/test/java/org/springframework/data/elasticsearch/repositories/CustomMethodRepositoryTest.java @@ -23,6 +23,7 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.data.elasticsearch.SampleEntity; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.query.DeleteQuery; @@ -34,6 +35,7 @@ import javax.annotation.Resource; import java.util.Arrays; import java.util.List; +import static org.apache.commons.lang.RandomStringUtils.random; import static org.apache.commons.lang.RandomStringUtils.randomNumeric; import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery; import static org.hamcrest.Matchers.*; @@ -413,4 +415,52 @@ public class CustomMethodRepositoryTest { assertThat(page.getTotalElements(), is(equalTo(1L))); } + @Test + public void shouldReturnPageableResultsWithQueryAnnotationExpectedPageSize() { + // given + for (int i = 0; i < 30; i++) { + String documentId = String.valueOf(i); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setMessage("message"); + sampleEntity.setVersion(System.currentTimeMillis()); + repository.save(sampleEntity); + } + // when + Page pageResult = repository.findByMessage("message", new PageRequest(0, 23, new Sort(new Sort.Order(Sort.Direction.ASC,"message")))); + // then + assertThat(pageResult.getTotalElements(), is(equalTo(30L))); + assertThat(pageResult.getContent().size(), is(equalTo(23))); + } + + @Test + public void shouldReturnPageableResultsWithGivenSortingOrder(){ + //given + String documentId = random(5); + SampleEntity sampleEntity = new SampleEntity(); + sampleEntity.setId(documentId); + sampleEntity.setMessage("abc"); + sampleEntity.setVersion(System.currentTimeMillis()); + repository.save(sampleEntity); + + String documentId2 = randomNumeric(5); + SampleEntity sampleEntity2 = new SampleEntity(); + sampleEntity2.setId(documentId2); + sampleEntity2.setMessage("abd"); + sampleEntity.setVersion(System.currentTimeMillis()); + repository.save(sampleEntity2); + + String documentId3 = randomNumeric(5); + SampleEntity sampleEntity3 = new SampleEntity(); + sampleEntity3.setId(documentId3); + sampleEntity3.setMessage("abe"); + sampleEntity.setVersion(System.currentTimeMillis()); + repository.save(sampleEntity3); + //when + Page pageResult = repository.findByMessageContaining("a", new PageRequest(0, 23, new Sort(new Sort.Order(Sort.Direction.DESC,"message")))); + //then + assertThat(pageResult.getContent().isEmpty(),is(false)); + assertThat(pageResult.getContent().get(0).getMessage(),is(sampleEntity3.getMessage())); + } + }