From 6e389d79b1f999bf06268bfa42d6549247e72039 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 15 Mar 2023 15:23:28 +0100 Subject: [PATCH] Polishing. Reduce method visibility. Improve method naming. Avoid using var in production code. See #2857 Original pull request #2859 --- ...bernateJpaParametersParameterAccessor.java | 27 +++++++++---------- .../query/JpaParametersParameterAccessor.java | 12 ++++----- .../query/QueryParameterSetter.java | 2 +- ...rIndexedQueryParameterSetterUnitTests.java | 2 +- 4 files changed, 19 insertions(+), 24 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/HibernateJpaParametersParameterAccessor.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/HibernateJpaParametersParameterAccessor.java index 8293a0d17..d5f153b8e 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/HibernateJpaParametersParameterAccessor.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/provider/HibernateJpaParametersParameterAccessor.java @@ -17,22 +17,20 @@ package org.springframework.data.jpa.provider; import jakarta.persistence.EntityManager; -import java.util.Date; - import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.query.TypedParameterValue; +import org.hibernate.type.BasicType; import org.hibernate.type.BasicTypeRegistry; import org.springframework.data.jpa.repository.query.JpaParametersParameterAccessor; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.ParametersParameterAccessor; import org.springframework.lang.Nullable; -import org.springframework.util.Assert; /** * {@link org.springframework.data.repository.query.ParameterAccessor} based on an {@link Parameters} instance. In - * addition to the {@link JpaParametersParameterAccessor} functions, the bindable value is provided by fetching the - * method type when there is null. + * addition to the {@link JpaParametersParameterAccessor} functions, the bindable parameterValue is provided by fetching + * the method type when there is null. * * @author Wonchul Heo * @author Jens Schauder @@ -68,13 +66,13 @@ class HibernateJpaParametersParameterAccessor extends JpaParametersParameterAcce @SuppressWarnings("unchecked") public Object getValue(Parameter parameter) { - var value = super.getValue(parameter.getIndex()); + Object value = super.getValue(parameter.getIndex()); if (value != null) { return value; } - var type = typeHelper.getRegisteredType(parameter.getType()); + BasicType type = typeHelper.getRegisteredType(parameter.getType()); if (type == null) { return null; @@ -84,19 +82,18 @@ class HibernateJpaParametersParameterAccessor extends JpaParametersParameterAcce } /** - * For Hibernate, check if the incoming value is wrapped inside a {@link TypedParameterValue} before extracting and - * casting the {@link Date}. + * For Hibernate, check if the incoming parameterValue can be wrapped inside a {@link TypedParameterValue} before + * extracting. * - * @param value a value that is either a {@link Date} or a {@link TypedParameterValue} containing a {@literal Date}. + * @param parameterValue a parameterValue that is either a plain value or a {@link TypedParameterValue} containing a + * {@literal Date}. * @since 3.0.4 */ @Override - public Date unwrapDate(Object value) { + protected Object potentiallyUnwrap(Object parameterValue) { - Object extracted = (value instanceof TypedParameterValue typedParameterValue) // + return (parameterValue instanceof TypedParameterValue typedParameterValue) // ? typedParameterValue.getValue() // - : value; - - return (Date) extracted; + : parameterValue; } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaParametersParameterAccessor.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaParametersParameterAccessor.java index c95e65a44..70c384ca4 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaParametersParameterAccessor.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaParametersParameterAccessor.java @@ -15,8 +15,6 @@ */ package org.springframework.data.jpa.repository.query; -import java.util.Date; - import org.springframework.data.jpa.repository.query.JpaParameters.JpaParameter; import org.springframework.data.repository.query.Parameter; import org.springframework.data.repository.query.Parameters; @@ -54,13 +52,13 @@ public class JpaParametersParameterAccessor extends ParametersParameterAccessor } /** - * For general JPA providers, simply pass through the extracted value, casting it as a {@link Date}. + * Apply potential unwrapping to {@code parameterValue}. * - * @param extractedValue - * @since 3.1 + * @param parameterValue + * @since 3.0.4 */ - public Date unwrapDate(Object extractedValue) { - return (Date) extractedValue; + protected Object potentiallyUnwrap(Object parameterValue) { + return parameterValue; } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java index 4e68fbc2d..a1991f1a3 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java @@ -83,7 +83,7 @@ interface QueryParameterSetter { Object extractedValue = valueExtractor.apply(accessor); - final Date value = accessor.unwrapDate(extractedValue); + Date value = (Date) accessor.potentiallyUnwrap(extractedValue); // One would think we can simply use parameter to identify the parameter we want to set. // But that does not work with list valued parameters. At least Hibernate tries to bind them by name. diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java index c6127b1a3..171322146 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java @@ -68,7 +68,7 @@ class NamedOrIndexedQueryParameterSetterUnitTests { Date testDate = new Date(); when(accessor.getValues()).thenReturn(new Object[] { testDate }); - when(accessor.unwrapDate(testDate)).thenReturn(testDate); + when(accessor.potentiallyUnwrap(testDate)).thenReturn(testDate); this.methodArguments = accessor; }