Skip to content

Commit 373be49

Browse files
authored
Fix exists query for imperative repository implementation.
Original Pull Request #2236 Closes #2162
1 parent 12b3322 commit 373be49

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

src/main/java/org/springframework/data/elasticsearch/repository/query/ElasticsearchPartQuery.java

+3
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,9 @@ public Object execute(Object[] parameters) {
128128

129129
} else if (tree.isCountProjection()) {
130130
result = elasticsearchOperations.count(query, clazz, index);
131+
} else if (tree.isExistsProjection()) {
132+
long count = elasticsearchOperations.count(query, clazz, index);
133+
result = count > 0;
131134
} else {
132135
result = elasticsearchOperations.searchOne(query, clazz, index);
133136
}

src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/QueryKeywordsIntegrationTests.java

+13
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,17 @@ void shouldFindByNonEmptyProperty() {
310310
assertThat(searchHits.getTotalHits()).isEqualTo(5);
311311
}
312312

313+
@Test // #2162
314+
@DisplayName("should run exists query")
315+
void shouldRunExistsQuery() {
316+
317+
Boolean existsCaneSugar = repository.existsByText("Cane sugar");
318+
Boolean existsSand = repository.existsByText("Sand");
319+
320+
assertThat(existsCaneSugar).isTrue();
321+
assertThat(existsSand).isFalse();
322+
}
323+
313324
@SuppressWarnings("unused")
314325
@Document(indexName = "#{@indexNameProvider.indexName()}")
315326
static class Product {
@@ -452,6 +463,8 @@ interface ProductRepository extends ElasticsearchRepository<Product, String> {
452463
SearchHits<Product> findByNameEmpty();
453464

454465
SearchHits<Product> findByNameNotEmpty();
466+
467+
Boolean existsByText(String text);
455468
}
456469

457470
}

src/test/java/org/springframework/data/elasticsearch/repository/query/keywords/ReactiveQueryKeywordsIntegrationTests.java

+20
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@
1919
import static org.springframework.data.elasticsearch.annotations.FieldType.*;
2020

2121
import reactor.core.publisher.Flux;
22+
import reactor.core.publisher.Mono;
2223
import reactor.test.StepVerifier;
2324

25+
import java.lang.Boolean;
26+
2427
import org.junit.jupiter.api.BeforeEach;
2528
import org.junit.jupiter.api.DisplayName;
2629
import org.junit.jupiter.api.Order;
@@ -121,6 +124,21 @@ void shouldFindByNotEmptyProperty() {
121124
}).verifyComplete();
122125
}
123126

127+
@Test // #2162
128+
@DisplayName("should run exists query")
129+
void shouldRunExistsQuery() {
130+
131+
loadEntities();
132+
repository.existsByMessage("message") //
133+
.as(StepVerifier::create) //
134+
.expectNext(true) //
135+
.verifyComplete();
136+
repository.existsByMessage("without") //
137+
.as(StepVerifier::create) //
138+
.expectNext(false) //
139+
.verifyComplete();
140+
}
141+
124142
@SuppressWarnings("SpringDataMethodInconsistencyInspection")
125143
interface SampleRepository extends ReactiveElasticsearchRepository<SampleEntity, String> {
126144
Flux<SearchHit<SampleEntity>> findByMessageExists();
@@ -132,6 +150,8 @@ interface SampleRepository extends ReactiveElasticsearchRepository<SampleEntity,
132150
Flux<SearchHit<SampleEntity>> findByMessageIsNotEmpty();
133151

134152
Flux<SearchHit<SampleEntity>> findByMessageIsEmpty();
153+
154+
Mono<Boolean> existsByMessage(String message);
135155
}
136156

137157
private void loadEntities() {

0 commit comments

Comments
 (0)