Skip to content

Commit

Permalink
Improve performance of PersistenceProvider.condense.
Browse files Browse the repository at this point in the history
No need to check every time the function is called.

Closes #2860.
Original pull request #2861
  • Loading branch information
gregturn authored and schauder committed Mar 15, 2023
1 parent c56124f commit 7f68081
Showing 1 changed file with 11 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -25,7 +24,11 @@
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;
Expand Down Expand Up @@ -187,6 +190,8 @@ public String getCommentHintKey() {
}
};

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

static ConcurrentReferenceHashMap<Class<?>, PersistenceProvider> CACHE = new ConcurrentReferenceHashMap<>();
Expand Down Expand Up @@ -319,13 +324,12 @@ public boolean canExtractQuery() {
*/
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;
Expand Down

0 comments on commit 7f68081

Please sign in to comment.