diff --git a/src/main/java/org/springframework/data/r2dbc/repository/query/AbstractR2dbcQuery.java b/src/main/java/org/springframework/data/r2dbc/repository/query/AbstractR2dbcQuery.java index e5cf80b..35c2daa 100644 --- a/src/main/java/org/springframework/data/r2dbc/repository/query/AbstractR2dbcQuery.java +++ b/src/main/java/org/springframework/data/r2dbc/repository/query/AbstractR2dbcQuery.java @@ -122,6 +122,10 @@ public abstract class AbstractR2dbcQuery implements RepositoryQuery { ReturnedType returnedType = resultProcessor.getReturnedType(); + if (returnedType.getReturnedType().isAssignableFrom(returnedType.getDomainType())) { + return returnedType.getDomainType(); + } + return returnedType.isProjecting() ? returnedType.getDomainType() : returnedType.getReturnedType(); } diff --git a/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java index d0b8ab1..d36b5b4 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java @@ -347,11 +347,16 @@ public abstract class AbstractR2dbcRepositoryIntegrationTests extends R2dbcInteg Mono countByNameContains(String namePart); } + public interface Buildable { + + String getName(); + } + @Getter @Setter @Table("legoset") @NoArgsConstructor - static class LegoSet extends Lego { + static class LegoSet extends Lego implements Buildable { String name; Integer manual; diff --git a/src/test/java/org/springframework/data/r2dbc/repository/H2R2dbcRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/r2dbc/repository/H2R2dbcRepositoryIntegrationTests.java index 769bf5b..97396dc 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/H2R2dbcRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/H2R2dbcRepositoryIntegrationTests.java @@ -137,8 +137,19 @@ public class H2R2dbcRepositoryIntegrationTests extends AbstractR2dbcRepositoryIn }).verifyComplete(); } + @Test // gh-519 + public void shouldReturnEntityThroughInterface() { + + shouldInsertNewItems(); + + repository.findByName("SCHAUFELRADBAGGER").map(Buildable::getName).as(StepVerifier::create) + .expectNext("SCHAUFELRADBAGGER").verifyComplete(); + } + interface H2LegoSetRepository extends LegoSetRepository { + Mono findByName(String name); + @Override @Query("SELECT name FROM legoset") Flux findAsProjection();