Skip to content

Commit 0b5ebdb

Browse files
gregturnschauder
authored andcommitted
Improve performance of PersistenceProvider.condense.
No need to check every time the function is called. Closes #2860. Original pull request #2861
1 parent 09bf268 commit 0b5ebdb

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java

+11-7
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
*/
1616
package org.springframework.data.jpa.provider;
1717

18-
import static org.springframework.data.jpa.provider.JpaClassUtils.isEntityManagerOfType;
19-
import static org.springframework.data.jpa.provider.JpaClassUtils.isMetamodelOfType;
18+
import static org.springframework.data.jpa.provider.JpaClassUtils.*;
2019
import static org.springframework.data.jpa.provider.PersistenceProvider.Constants.*;
2120

2221
import jakarta.persistence.EntityManager;
@@ -25,7 +24,11 @@
2524
import jakarta.persistence.metamodel.Metamodel;
2625
import jakarta.persistence.metamodel.SingularAttribute;
2726

28-
import java.util.*;
27+
import java.util.Collection;
28+
import java.util.Collections;
29+
import java.util.List;
30+
import java.util.NoSuchElementException;
31+
import java.util.Set;
2932

3033
import org.eclipse.persistence.config.QueryHints;
3134
import org.eclipse.persistence.jpa.JpaQuery;
@@ -187,6 +190,8 @@ public String getCommentHintKey() {
187190
}
188191
};
189192

193+
private static final boolean hibernatePresent = ClassUtils.isPresent("org.hibernate.query.TypedParameterValue",
194+
PersistenceProvider.class.getClassLoader());
190195
private static final Collection<PersistenceProvider> ALL = List.of(HIBERNATE, ECLIPSELINK, GENERIC_JPA);
191196

192197
static ConcurrentReferenceHashMap<Class<?>, PersistenceProvider> CACHE = new ConcurrentReferenceHashMap<>();
@@ -319,13 +324,12 @@ public boolean canExtractQuery() {
319324
*/
320325
public static Object condense(Object value) {
321326

322-
ClassLoader classLoader = PersistenceProvider.class.getClassLoader();
323-
324-
if (ClassUtils.isPresent("org.hibernate.query.TypedParameterValue", classLoader)) {
327+
if (hibernatePresent) {
325328

326329
try {
327330

328-
Class<?> typeParameterValue = ClassUtils.forName("org.hibernate.query.TypedParameterValue", classLoader);
331+
Class<?> typeParameterValue = ClassUtils.forName("org.hibernate.query.TypedParameterValue",
332+
PersistenceProvider.class.getClassLoader());
329333

330334
if (typeParameterValue.isInstance(value)) {
331335
return null;

0 commit comments

Comments
 (0)