diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java index 68fa5e71f..5133b96fd 100644 --- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java +++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java @@ -253,18 +253,11 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw Mono doCount(Query query, Class entityClass, SqlIdentifier tableName) { - RelationalPersistentEntity entity = getRequiredEntity(entityClass); StatementMapper statementMapper = dataAccessStrategy.getStatementMapper().forType(entityClass); StatementMapper.SelectSpec selectSpec = statementMapper // .createSelect(tableName) // - .doWithTable((table, spec) -> { - - Expression countExpression = entity.hasIdProperty() - ? table.column(entity.getRequiredIdProperty().getColumnName()) - : Expressions.just("1"); - return spec.withProjection(Functions.count(countExpression)); - }); + .withProjection(Functions.count(Expressions.just("*"))); Optional criteria = query.getCriteria(); if (criteria.isPresent()) { @@ -290,17 +283,9 @@ public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAw Mono doExists(Query query, Class entityClass, SqlIdentifier tableName) { - RelationalPersistentEntity entity = getRequiredEntity(entityClass); StatementMapper statementMapper = dataAccessStrategy.getStatementMapper().forType(entityClass); - - StatementMapper.SelectSpec selectSpec = statementMapper.createSelect(tableName).limit(1); - if (entity.hasIdProperty()) { - selectSpec = selectSpec // - .withProjection(entity.getRequiredIdProperty().getColumnName()); - - } else { - selectSpec = selectSpec.withProjection(Expressions.just("1")); - } + StatementMapper.SelectSpec selectSpec = statementMapper.createSelect(tableName).limit(1) + .withProjection(Expressions.just("1")); Optional criteria = query.getCriteria(); if (criteria.isPresent()) { diff --git a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplateUnitTests.java b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplateUnitTests.java index 26581dde4..c46357692 100644 --- a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplateUnitTests.java +++ b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplateUnitTests.java @@ -100,7 +100,7 @@ public class R2dbcEntityTemplateUnitTests { StatementRecorder.RecordedStatement statement = recorder.getCreatedStatement(s -> s.startsWith("SELECT")); - assertThat(statement.getSql()).isEqualTo("SELECT COUNT(person.id) FROM person WHERE person.THE_NAME = $1"); + assertThat(statement.getSql()).isEqualTo("SELECT COUNT(*) FROM person WHERE person.THE_NAME = $1"); assertThat(statement.getBindings()).hasSize(1).containsEntry(0, Parameter.from("Walter")); } @@ -141,7 +141,7 @@ public class R2dbcEntityTemplateUnitTests { MockResult result = MockResult.builder().row(MockRow.builder().identified(0, Long.class, 1L).build()).build(); - recorder.addStubbing(s -> s.startsWith("SELECT COUNT(1)"), result); + recorder.addStubbing(s -> s.startsWith("SELECT COUNT(*)"), result); entityTemplate.select(WithoutId.class).count() // .as(StepVerifier::create) // @@ -165,7 +165,7 @@ public class R2dbcEntityTemplateUnitTests { StatementRecorder.RecordedStatement statement = recorder.getCreatedStatement(s -> s.startsWith("SELECT")); - assertThat(statement.getSql()).isEqualTo("SELECT person.id FROM person WHERE person.THE_NAME = $1 LIMIT 1"); + assertThat(statement.getSql()).isEqualTo("SELECT 1 FROM person WHERE person.THE_NAME = $1 LIMIT 1"); assertThat(statement.getBindings()).hasSize(1).containsEntry(0, Parameter.from("Walter")); } diff --git a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/ReactiveSelectOperationUnitTests.java b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/ReactiveSelectOperationUnitTests.java index 0d1541f32..3f35c8b69 100644 --- a/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/ReactiveSelectOperationUnitTests.java +++ b/spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/core/ReactiveSelectOperationUnitTests.java @@ -216,7 +216,7 @@ public class ReactiveSelectOperationUnitTests { StatementRecorder.RecordedStatement statement = recorder.getCreatedStatement(s -> s.startsWith("SELECT")); - assertThat(statement.getSql()).isEqualTo("SELECT person.id FROM person WHERE person.THE_NAME = $1 LIMIT 1"); + assertThat(statement.getSql()).isEqualTo("SELECT 1 FROM person WHERE person.THE_NAME = $1 LIMIT 1"); } @Test // gh-220 @@ -239,7 +239,7 @@ public class ReactiveSelectOperationUnitTests { StatementRecorder.RecordedStatement statement = recorder.getCreatedStatement(s -> s.startsWith("SELECT")); - assertThat(statement.getSql()).isEqualTo("SELECT COUNT(person.id) FROM person WHERE person.THE_NAME = $1"); + assertThat(statement.getSql()).isEqualTo("SELECT COUNT(*) FROM person WHERE person.THE_NAME = $1"); } static class Person {