From 0b5ebdb79772c072169c5086c8a7e09f9b12be17 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Tue, 14 Mar 2023 17:33:26 -0500 Subject: [PATCH] Improve performance of PersistenceProvider.condense. No need to check every time the function is called. Closes #2860. Original pull request #2861 --- .../data/jpa/provider/PersistenceProvider.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java index 6468bcaf0..7b0541d1c 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java @@ -15,8 +15,7 @@ */ package org.springframework.data.jpa.provider; -import static org.springframework.data.jpa.provider.JpaClassUtils.isEntityManagerOfType; -import static org.springframework.data.jpa.provider.JpaClassUtils.isMetamodelOfType; +import static org.springframework.data.jpa.provider.JpaClassUtils.*; import static org.springframework.data.jpa.provider.PersistenceProvider.Constants.*; import jakarta.persistence.EntityManager; @@ -25,7 +24,11 @@ import jakarta.persistence.metamodel.IdentifiableType; import jakarta.persistence.metamodel.Metamodel; import jakarta.persistence.metamodel.SingularAttribute; -import java.util.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Set; import org.eclipse.persistence.config.QueryHints; import org.eclipse.persistence.jpa.JpaQuery; @@ -187,6 +190,8 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor, Quer } }; + private static final boolean hibernatePresent = ClassUtils.isPresent("org.hibernate.query.TypedParameterValue", + PersistenceProvider.class.getClassLoader()); private static final Collection ALL = List.of(HIBERNATE, ECLIPSELINK, GENERIC_JPA); static ConcurrentReferenceHashMap, PersistenceProvider> CACHE = new ConcurrentReferenceHashMap<>(); @@ -319,13 +324,12 @@ public enum PersistenceProvider implements QueryExtractor, ProxyIdAccessor, Quer */ public static Object condense(Object value) { - ClassLoader classLoader = PersistenceProvider.class.getClassLoader(); - - if (ClassUtils.isPresent("org.hibernate.query.TypedParameterValue", classLoader)) { + if (hibernatePresent) { try { - Class typeParameterValue = ClassUtils.forName("org.hibernate.query.TypedParameterValue", classLoader); + Class typeParameterValue = ClassUtils.forName("org.hibernate.query.TypedParameterValue", + PersistenceProvider.class.getClassLoader()); if (typeParameterValue.isInstance(value)) { return null;