diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRuntimeHints.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRuntimeHints.java index b336e7cb1..425fef3b1 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRuntimeHints.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRuntimeHints.java @@ -18,7 +18,9 @@ package org.springframework.data.jpa.repository.aot; import jakarta.persistence.NamedEntityGraph; import java.util.Arrays; +import java.util.Collections; +import org.springframework.aot.hint.ExecutableMode; import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; @@ -76,6 +78,12 @@ class JpaRuntimeHints implements RuntimeHintsRegistrar { .onReachableType(QuerydslPredicateExecutor.class)); } + // streaming results requires reflective access to jakarta.persistence.Query#getResultAsStream + hints.reflection().registerType(jakarta.persistence.Query.class, MemberCategory.INTROSPECT_PUBLIC_METHODS); + hints.reflection().registerType(jakarta.persistence.Query.class, hint -> { + hint.withMethod("getResultStream", Collections.emptyList(), ExecutableMode.INVOKE); + }); + hints.reflection().registerType(NamedEntityGraph.class, hint -> hint.onReachableType(EntityGraph.class).withMembers(MemberCategory.INVOKE_PUBLIC_METHODS)); }