mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-17 16:39:29 +00:00
Refine EntityManagerRuntimeHints for Hibernate 7.1+
This commit adds support for Hibernate 7.1+ SqmQueryImpl class in EntityManagerRuntimeHints, keeps the support for the former QuerySqmImpl class for Hibernate 7.0 compatibility and adds a related test. Closes gh-35462
This commit is contained in:
@@ -39,8 +39,12 @@ class EntityManagerRuntimeHints implements RuntimeHintsRegistrar {
|
||||
|
||||
private static final String ENTITY_MANAGER_FACTORY_CLASS_NAME = "jakarta.persistence.EntityManagerFactory";
|
||||
|
||||
// Up to Hibernate 7.0
|
||||
private static final String QUERY_SQM_IMPL_CLASS_NAME = "org.hibernate.query.sqm.internal.QuerySqmImpl";
|
||||
|
||||
// As of Hibernate 7.1
|
||||
private static final String SQM_QUERY_IMPL_CLASS_NAME = "org.hibernate.query.sqm.internal.SqmQueryImpl";
|
||||
|
||||
private static final String NATIVE_QUERY_IMPL_CLASS_NAME = "org.hibernate.query.sql.internal.NativeQueryImpl";
|
||||
|
||||
|
||||
@@ -66,6 +70,12 @@ class EntityManagerRuntimeHints implements RuntimeHintsRegistrar {
|
||||
}
|
||||
catch (ClassNotFoundException ignored) {
|
||||
}
|
||||
try {
|
||||
Class<?> clazz = ClassUtils.forName(SQM_QUERY_IMPL_CLASS_NAME, classLoader);
|
||||
hints.proxies().registerJdkProxy(ClassUtils.getAllInterfacesForClass(clazz, classLoader));
|
||||
}
|
||||
catch (ClassNotFoundException ignored) {
|
||||
}
|
||||
try {
|
||||
Class<?> clazz = ClassUtils.forName(NATIVE_QUERY_IMPL_CLASS_NAME, classLoader);
|
||||
hints.proxies().registerJdkProxy(ClassUtils.getAllInterfacesForClass(clazz, classLoader));
|
||||
|
||||
+15
@@ -19,6 +19,11 @@ package org.springframework.orm.jpa;
|
||||
import jakarta.persistence.EntityManagerFactory;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.query.CommonQueryContract;
|
||||
import org.hibernate.query.SelectionQuery;
|
||||
import org.hibernate.query.hql.spi.SqmQueryImplementor;
|
||||
import org.hibernate.query.spi.DomainQueryExecutionContext;
|
||||
import org.hibernate.query.sqm.spi.InterpretationsKeySource;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
@@ -63,4 +68,14 @@ class EntityManagerRuntimeHintsTests {
|
||||
assertThat(RuntimeHintsPredicates.reflection().onMethodInvocation(EntityManagerFactory.class, "getCriteriaBuilder")).accepts(this.hints);
|
||||
assertThat(RuntimeHintsPredicates.reflection().onMethodInvocation(EntityManagerFactory.class, "getMetamodel")).accepts(this.hints);
|
||||
}
|
||||
|
||||
@Test
|
||||
void sqmQueryHints() {
|
||||
assertThat(RuntimeHintsPredicates.proxies().forInterfaces(
|
||||
SqmQueryImplementor.class,
|
||||
InterpretationsKeySource.class,
|
||||
DomainQueryExecutionContext.class,
|
||||
SelectionQuery.class,
|
||||
CommonQueryContract.class)).accepts(this.hints);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user