Skip to content

Commit ff1f8bf

Browse files
committed
Polishing.
TypedParameterValue class only gets loaded once. Renamed the method to better capture its behaviour. See #2860 See #2861
1 parent 0b5ebdb commit ff1f8bf

File tree

3 files changed

+32
-33
lines changed

3 files changed

+32
-33
lines changed

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

+19-20
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,20 @@ public String getCommentHintKey() {
190190
}
191191
};
192192

193-
private static final boolean hibernatePresent = ClassUtils.isPresent("org.hibernate.query.TypedParameterValue",
194-
PersistenceProvider.class.getClassLoader());
193+
private static final Class<?> typedParameterValueClass;
194+
195+
static {
196+
197+
Class<?> type;
198+
try {
199+
type = ClassUtils.forName("org.hibernate.query.TypedParameterValue",
200+
PersistenceProvider.class.getClassLoader());
201+
} catch (ClassNotFoundException e) {
202+
type = null;
203+
}
204+
typedParameterValueClass = type;
205+
}
206+
195207
private static final Collection<PersistenceProvider> ALL = List.of(HIBERNATE, ECLIPSELINK, GENERIC_JPA);
196208

197209
static ConcurrentReferenceHashMap<Class<?>, PersistenceProvider> CACHE = new ConcurrentReferenceHashMap<>();
@@ -319,27 +331,14 @@ public boolean canExtractQuery() {
319331
* empty string for query creation.
320332
*
321333
* @param value
322-
* @return the original value or an empty string.
334+
* @return the original value or null.
323335
* @since 3.0
324336
*/
325-
public static Object condense(Object value) {
326-
327-
if (hibernatePresent) {
328-
329-
try {
330-
331-
Class<?> typeParameterValue = ClassUtils.forName("org.hibernate.query.TypedParameterValue",
332-
PersistenceProvider.class.getClassLoader());
333-
334-
if (typeParameterValue.isInstance(value)) {
335-
return null;
336-
}
337-
} catch (ClassNotFoundException | LinkageError o_O) {
338-
return value;
339-
}
340-
}
337+
public static Object unwrapTypedParameterValue(Object value) {
341338

342-
return value;
339+
return typedParameterValueClass != null && typedParameterValueClass.isInstance(value) //
340+
? null //
341+
: value;
343342
}
344343

345344
/**

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/ParameterMetadataProvider.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -233,24 +233,24 @@ public Object prepare(Object value) {
233233

234234
Assert.notNull(value, "Value must not be null");
235235

236-
Object condensedValue = PersistenceProvider.condense(value);
236+
Object unwrapped = PersistenceProvider.unwrapTypedParameterValue(value);
237237

238-
if (condensedValue == null || expression.getJavaType() == null) {
239-
return condensedValue;
238+
if (unwrapped == null || expression.getJavaType() == null) {
239+
return unwrapped;
240240
}
241241

242242
if (String.class.equals(expression.getJavaType()) && !noWildcards) {
243243

244244
switch (type) {
245245
case STARTING_WITH:
246-
return String.format("%s%%", escape.escape(condensedValue.toString()));
246+
return String.format("%s%%", escape.escape(unwrapped.toString()));
247247
case ENDING_WITH:
248-
return String.format("%%%s", escape.escape(condensedValue.toString()));
248+
return String.format("%%%s", escape.escape(unwrapped.toString()));
249249
case CONTAINING:
250250
case NOT_CONTAINING:
251-
return String.format("%%%s%%", escape.escape(condensedValue.toString()));
251+
return String.format("%%%s%%", escape.escape(unwrapped.toString()));
252252
default:
253-
return condensedValue;
253+
return unwrapped;
254254
}
255255
}
256256

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -714,21 +714,21 @@ public Type getType() {
714714
@Override
715715
public Object prepare(@Nullable Object value) {
716716

717-
Object condensedValue = PersistenceProvider.condense(value);
718-
if (condensedValue == null) {
717+
Object unwrapped = PersistenceProvider.unwrapTypedParameterValue(value);
718+
if (unwrapped == null) {
719719
return null;
720720
}
721721

722722
switch (type) {
723723
case STARTING_WITH:
724-
return String.format("%s%%", condensedValue);
724+
return String.format("%s%%", unwrapped);
725725
case ENDING_WITH:
726-
return String.format("%%%s", condensedValue);
726+
return String.format("%%%s", unwrapped);
727727
case CONTAINING:
728-
return String.format("%%%s%%", condensedValue);
728+
return String.format("%%%s%%", unwrapped);
729729
case LIKE:
730730
default:
731-
return condensedValue;
731+
return unwrapped;
732732
}
733733
}
734734

0 commit comments

Comments
 (0)