Skip to content

Commit 8e7a1e1

Browse files
oktupolmp911de
authored andcommitted
Fix R2dbcEntityTemplate.getRowsFetchSpec(…) to use the correct Converter for result type conversion.
Closes #1723
1 parent e5fdcf2 commit 8e7a1e1

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/core/R2dbcEntityTemplate.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
* @author Jens Schauder
9494
* @author Jose Luis Leon
9595
* @author Robert Heim
96+
* @author Sebastian Wieland
9697
* @since 1.1
9798
*/
9899
public class R2dbcEntityTemplate implements R2dbcEntityOperations, BeanFactoryAware, ApplicationContextAware {
@@ -821,10 +822,10 @@ public <T> RowsFetchSpec<T> getRowsFetchSpec(DatabaseClient.GenericExecuteSpec e
821822

822823
// Bridge-code: Consider Converter<Row, T> until we have fully migrated to RowDocument
823824
if (converter instanceof AbstractRelationalConverter relationalConverter
824-
&& relationalConverter.getConversions().hasCustomReadTarget(Row.class, entityType)) {
825+
&& relationalConverter.getConversions().hasCustomReadTarget(Row.class, resultType)) {
825826

826827
ConversionService conversionService = relationalConverter.getConversionService();
827-
rowMapper = (row, rowMetadata) -> (T) conversionService.convert(row, entityType);
828+
rowMapper = (row, rowMetadata) -> (T) conversionService.convert(row, resultType);
828829
} else if (simpleType) {
829830
rowMapper = dataAccessStrategy.getRowMapper(resultType);
830831
} else {

spring-data-r2dbc/src/test/java/org/springframework/data/r2dbc/repository/ConvertingR2dbcRepositoryIntegrationTests.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import io.r2dbc.spi.ConnectionFactory;
2121
import io.r2dbc.spi.Row;
22+
import reactor.core.publisher.Mono;
2223
import reactor.test.StepVerifier;
2324

2425
import java.util.Arrays;
@@ -51,6 +52,7 @@
5152
* Integration tests for {@link ConvertedRepository} that uses {@link Converter}s on entity-level.
5253
*
5354
* @author Mark Paluch
55+
* @author Sebastian Wieland
5456
*/
5557
@ExtendWith(SpringExtension.class)
5658
public class ConvertingR2dbcRepositoryIntegrationTests {
@@ -122,8 +124,26 @@ void shouldInsertAndReadItems() {
122124
}).verifyComplete();
123125
}
124126

125-
interface ConvertedRepository extends ReactiveCrudRepository<ConvertedEntity, Integer> {
127+
@Test
128+
void shouldNotUseConverterForCountQueries() {
129+
ConvertedEntity entity = new ConvertedEntity();
130+
entity.name = "name";
126131

132+
repository.save(entity) //
133+
.as(StepVerifier::create) //
134+
.expectNextCount(1) //
135+
.verifyComplete();
136+
137+
repository.countWithCustomQuery() //
138+
.as(StepVerifier::create) //
139+
.consumeNextWith(actual -> {
140+
assertThat(actual).isEqualTo(1L);
141+
}).verifyComplete();
142+
}
143+
144+
interface ConvertedRepository extends ReactiveCrudRepository<ConvertedEntity, Integer> {
145+
@Query("SELECT COUNT(*) FROM CONVERTED_ENTITY")
146+
Mono<Long> countWithCustomQuery();
127147
}
128148

129149
static class ConvertedEntity {

0 commit comments

Comments
 (0)