Skip to content

Commit 61d1b61

Browse files
Add reflection runtime hint for SqmQueryPart.
This commit fixes an issue where some hibernate internals get triggered when obtaining a single result. Closes: #3708
1 parent d040b56 commit 61d1b61

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRuntimeHints.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,23 @@ public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader)
9393

9494
hints.reflection().registerType(NamedEntityGraph.class,
9595
hint -> hint.onReachableType(EntityGraph.class).withMembers(MemberCategory.INVOKE_PUBLIC_METHODS));
96+
97+
if (ClassUtils.isPresent("org.hibernate.Hibernate", classLoader)) {
98+
99+
/*
100+
Fetching a single results causes:
101+
java.lang.IllegalArgumentException: Class org.hibernate.query.sqm.tree.select.SqmQueryPart[] is instantiated reflectively but was never registered.Register the class by adding "unsafeAllocated" for the class in reflect-config.json.
102+
at org.graalvm.nativeimage.builder/com.oracle.svm.core.graal.snippets.SubstrateAllocationSnippets.arrayHubErrorStub(SubstrateAllocationSnippets.java:345)
103+
at org.hibernate.internal.util.collections.StandardStack.push(StandardStack.java:48)
104+
at org.hibernate.query.sqm.sql.BaseSqmToSqlAstConverter.visitQuerySpec(BaseSqmToSqlAstConverter.java:2073)
105+
106+
both formats:
107+
- org.hibernate.query.sqm.tree.select.SqmQueryPart[]
108+
- [Lorg.hibernate.query.sqm.tree.select.SqmQueryPart;
109+
seem to be supported via reflect-config. However TypeReference does not support [L...
110+
*/
111+
hints.reflection().registerType(TypeReference.of("org.hibernate.query.sqm.tree.select.SqmQueryPart[]"),
112+
MemberCategory.UNSAFE_ALLOCATED);
113+
}
96114
}
97115
}

0 commit comments

Comments
 (0)