Skip to content

Commit 9dbd41e

Browse files
gregturnschauder
authored andcommitted
Drop TypedParameterValue handling for stored procedures.
Hibernate resolved hibernate/hibernate-orm#5438, allowing us to no longer implement special handling. Closes #2902 Original pull request #2933
1 parent 879d662 commit 9dbd41e

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

src/main/java/org/springframework/data/jpa/provider/HibernateJpaParametersParameterAccessor.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,21 @@ public Object getValue(Parameter parameter) {
6868
}
6969
return new TypedParameterValue(type, null);
7070
}
71+
72+
/**
73+
* Utility method to potentially unwrap {@link TypedParameterValue}s. For certain operations, Hibernate doesn't
74+
* properly support them, so we must unwrap them before passing through.
75+
*
76+
* @param extractedValue
77+
* @return the value behind a {@link TypedParameterValue}
78+
*/
79+
@Override
80+
public Object potentiallyUnwrap(Object extractedValue) {
81+
82+
if (extractedValue instanceof TypedParameterValue) {
83+
return ((TypedParameterValue) extractedValue).getValue();
84+
} else {
85+
return extractedValue;
86+
}
87+
}
7188
}

src/main/java/org/springframework/data/jpa/repository/query/JpaParametersParameterAccessor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,17 @@ public <T> T getValue(Parameter parameter) {
4545
return super.getValue(parameter.getIndex());
4646
}
4747

48+
/**
49+
* Utility method to potentially unwrap certain provider-specific types. For general JPA, there are none, so it's a pass-through.
50+
*
51+
* @param extractedValue
52+
* @return the same value passed in
53+
*/
54+
@Nullable
55+
public Object potentiallyUnwrap(Object extractedValue) {
56+
return extractedValue;
57+
}
58+
4859
@Override
4960
public Object[] getValues() {
5061
return super.getValues();

src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18-
import static org.springframework.data.jpa.repository.query.QueryParameterSetter.ErrorHandling.LENIENT;
18+
import static org.springframework.data.jpa.repository.query.QueryParameterSetter.ErrorHandling.*;
1919

2020
import java.lang.reflect.Proxy;
2121
import java.util.Collections;
@@ -33,7 +33,6 @@
3333

3434
import org.apache.commons.logging.Log;
3535
import org.apache.commons.logging.LogFactory;
36-
import org.hibernate.jpa.TypedParameterValue;
3736
import org.springframework.lang.Nullable;
3837
import org.springframework.util.Assert;
3938

@@ -87,16 +86,10 @@ public void setParameter(BindableQuery query, JpaParametersParameterAccessor acc
8786

8887
final Object value;
8988

90-
// TODO: When https://github.com/hibernate/hibernate-orm/pull/5438 is merged we should be able to drop this.
9189
if (query.getQuery() instanceof StoredProcedureQuery) {
9290

9391
Object extractedValue = valueExtractor.apply(accessor);
94-
95-
if (extractedValue instanceof TypedParameterValue) {
96-
value = ((TypedParameterValue) extractedValue).getValue();
97-
} else {
98-
value = extractedValue;
99-
}
92+
value = accessor.potentiallyUnwrap(extractedValue);
10093
} else {
10194
value = valueExtractor.apply(accessor);
10295
}

0 commit comments

Comments
 (0)