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 06230fd..96955c0 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 @@ -129,6 +129,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 bf1acf4..c75423d 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java @@ -394,11 +394,16 @@ public abstract class AbstractR2dbcRepositoryIntegrationTests extends R2dbcInteg Mono existsByName(String name); } + public interface Buildable { + + String getName(); + } + @Getter @Setter @Table("legoset") @NoArgsConstructor - public static class LegoSet extends Lego { + public 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 668c270..f515d3a 100644 --- a/src/test/java/org/springframework/data/r2dbc/repository/H2R2dbcRepositoryIntegrationTests.java +++ b/src/test/java/org/springframework/data/r2dbc/repository/H2R2dbcRepositoryIntegrationTests.java @@ -142,8 +142,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); + @Query("SELECT MAX(manual) FROM legoset WHERE name = :name") Mono findMax(String name);