Skip to content

Commit e853a7a

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

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
@@ -715,21 +715,21 @@ public Type getType() {
715715
@Override
716716
public Object prepare(@Nullable Object value) {
717717

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

723723
switch (type) {
724724
case STARTING_WITH:
725-
return String.format("%s%%", condensedValue);
725+
return String.format("%s%%", unwrapped);
726726
case ENDING_WITH:
727-
return String.format("%%%s", condensedValue);
727+
return String.format("%%%s", unwrapped);
728728
case CONTAINING:
729-
return String.format("%%%s%%", condensedValue);
729+
return String.format("%%%s%%", unwrapped);
730730
case LIKE:
731731
default:
732-
return condensedValue;
732+
return unwrapped;
733733
}
734734
}
735735

0 commit comments

Comments
 (0)