From 78a73e5f57895aac5a84fc7b33f26430af1a4fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Wed, 16 Aug 2023 15:56:37 +0200 Subject: [PATCH] Add missing Hibernate 6.2 proxy hints This commit contributes proxy hints needed by SharedEntityManagerCreator for org.hibernate.query.sqm.internal.QuerySqmImpl interfaces. Until Hibernate 6.1, those hints were erroneously provided at GraalVM reachability metadata level. As of Hibernate 6.2, they are not, hence the need to contribute them at Spring Framework level. A related smoke test has been contributed via spring-projects/spring-aot-smoke-tests#188. Closes gh-31050 --- .../orm/jpa/EntityManagerRuntimeHints.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java index 89472a6359b..3164a36c963 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java @@ -37,6 +37,8 @@ class EntityManagerRuntimeHints implements RuntimeHintsRegistrar { private static final String ENTITY_MANAGER_FACTORY_CLASS_NAME = "jakarta.persistence.EntityManagerFactory"; + private static final String QUERY_SQM_IMPL_CLASS_NAME = "org.hibernate.query.sqm.internal.QuerySqmImpl"; + @Override public void registerHints(RuntimeHints hints, ClassLoader classLoader) { if (ClassUtils.isPresent(HIBERNATE_SESSION_FACTORY_CLASS_NAME, classLoader)) { @@ -53,5 +55,11 @@ class EntityManagerRuntimeHints implements RuntimeHintsRegistrar { Collections.emptyList(), ExecutableMode.INVOKE); }); } + try { + Class clazz = ClassUtils.forName(QUERY_SQM_IMPL_CLASS_NAME, classLoader); + hints.proxies().registerJdkProxy(ClassUtils.getAllInterfacesForClass(clazz, classLoader)); + } + catch (ClassNotFoundException ignored) { + } } }