diff --git a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java index 3eb0762ee..582e58702 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java @@ -176,7 +176,7 @@ public class JpaQueryCreator extends AbstractQueryCreator typeToRead = returnedType.getTypeToRead(); + Class typeToRead = returnedType.getReturnedType(); query = typeToRead.isInterface() ? query.multiselect(selections) diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index 841f7b466..75cccf226 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -2630,6 +2630,14 @@ public class UserRepositoryTests { assertThat(repository.findAllDtoProjectedBy()).hasSize(4); } + @Test // GH-2408, GH-2363 + void readsDerivedInterfaceProjections() { + + flushTestUsers(); + + assertThat(repository.findAllInterfaceProjectedBy()).hasSize(4); + } + private Page executeSpecWithSort(Sort sort) { flushTestUsers(); diff --git a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java index 721123ca1..9350b0184 100644 --- a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java +++ b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java @@ -614,6 +614,9 @@ public interface UserRepository // #2363 List findAllDtoProjectedBy(); + // GH-2408 + List findAllInterfaceProjectedBy(); + interface RolesAndFirstname { String getFirstname();