3131import org .springframework .data .jpa .repository .query .ParameterMetadataProvider .ParameterMetadata ;
3232import org .springframework .data .repository .query .ParametersParameterAccessor ;
3333import org .springframework .data .repository .query .ResultProcessor ;
34+ import org .springframework .data .repository .query .ReturnedType ;
3435import org .springframework .data .repository .query .parser .PartTree ;
3536
3637/**
@@ -98,9 +99,9 @@ public TypedQuery<Long> doCreateCountQuery(Object[] values) {
9899 @ Override
99100 protected JpaQueryExecution getExecution () {
100101
101- if (this .tree .isDelete ()) {
102+ if (this .tree .isDelete ()) {
102103 return new DeleteExecution (em );
103- } else if (this .tree .isExistsProjection ()) {
104+ } else if (this .tree .isExistsProjection ()) {
104105 return new ExistsExecution ();
105106 }
106107
@@ -123,7 +124,7 @@ public QueryPreparer(PersistenceProvider persistenceProvider, boolean recreateQu
123124
124125 this .persistenceProvider = persistenceProvider ;
125126
126- JpaQueryCreator creator = createCreator (null , persistenceProvider );
127+ JpaQueryCreator creator = createCreator (persistenceProvider , Optional . empty () );
127128
128129 this .cachedCriteriaQuery = recreateQueries ? null : creator .createQuery ();
129130 this .expressions = recreateQueries ? null : creator .getParameterExpressions ();
@@ -142,7 +143,7 @@ public Query createQuery(Object[] values) {
142143 ParametersParameterAccessor accessor = new ParametersParameterAccessor (parameters , values );
143144
144145 if (cachedCriteriaQuery == null || accessor .hasBindableNullValue ()) {
145- JpaQueryCreator creator = createCreator (accessor , persistenceProvider );
146+ JpaQueryCreator creator = createCreator (persistenceProvider , Optional . of ( accessor ) );
146147 criteriaQuery = creator .createQuery (getDynamicSort (values ));
147148 expressions = creator .getParameterExpressions ();
148149 }
@@ -178,7 +179,7 @@ private Query restrictMaxResultsIfNecessary(Query query) {
178179 query .setMaxResults (tree .getMaxResults ());
179180 }
180181
181- if (tree .isExistsProjection ()) {
182+ if (tree .isExistsProjection ()) {
182183 query .setMaxResults (1 );
183184 }
184185
@@ -204,19 +205,21 @@ private TypedQuery<?> createQuery(CriteriaQuery<?> criteriaQuery) {
204205 return getEntityManager ().createQuery (criteriaQuery );
205206 }
206207
207- protected JpaQueryCreator createCreator (ParametersParameterAccessor accessor ,
208- PersistenceProvider persistenceProvider ) {
208+ protected JpaQueryCreator createCreator (PersistenceProvider persistenceProvider ,
209+ Optional < ParametersParameterAccessor > accessor ) {
209210
210211 EntityManager entityManager = getEntityManager ();
211212 CriteriaBuilder builder = entityManager .getCriteriaBuilder ();
212213
213- ParameterMetadataProvider provider = accessor == null
214- ? new ParameterMetadataProvider (builder , parameters , persistenceProvider )
215- : new ParameterMetadataProvider (builder , accessor , persistenceProvider );
214+ ParameterMetadataProvider provider = accessor
215+ . map ( it -> new ParameterMetadataProvider (builder , it , persistenceProvider )) //
216+ . orElseGet (() -> new ParameterMetadataProvider (builder , parameters , persistenceProvider ) );
216217
217- ResultProcessor resultFactory = getQueryMethod ().getResultProcessor ().withDynamicProjection (Optional .ofNullable (accessor ));
218+ ResultProcessor processor = getQueryMethod ().getResultProcessor ();
219+ ReturnedType returnedType = accessor .map (it -> processor .withDynamicProjection (it ))//
220+ .orElse (processor ).getReturnedType ();
218221
219- return new JpaQueryCreator (tree , resultFactory . getReturnedType () , builder , provider );
222+ return new JpaQueryCreator (tree , returnedType , builder , provider );
220223 }
221224
222225 /**
@@ -259,15 +262,15 @@ public CountQueryPreparer(PersistenceProvider persistenceProvider, boolean recre
259262 * @see org.springframework.data.jpa.repository.query.PartTreeJpaQuery.QueryPreparer#createCreator(org.springframework.data.repository.query.ParametersParameterAccessor, org.springframework.data.jpa.provider.PersistenceProvider)
260263 */
261264 @ Override
262- protected JpaQueryCreator createCreator (ParametersParameterAccessor accessor ,
263- PersistenceProvider persistenceProvider ) {
265+ protected JpaQueryCreator createCreator (PersistenceProvider persistenceProvider ,
266+ Optional < ParametersParameterAccessor > accessor ) {
264267
265268 EntityManager entityManager = getEntityManager ();
266269 CriteriaBuilder builder = entityManager .getCriteriaBuilder ();
267270
268- ParameterMetadataProvider provider = accessor == null
269- ? new ParameterMetadataProvider (builder , parameters , persistenceProvider )
270- : new ParameterMetadataProvider (builder , accessor , persistenceProvider );
271+ ParameterMetadataProvider provider = accessor
272+ . map ( it -> new ParameterMetadataProvider (builder , it , persistenceProvider )) //
273+ . orElseGet (() -> new ParameterMetadataProvider (builder , parameters , persistenceProvider ) );
271274
272275 return new JpaCountQueryCreator (tree , getQueryMethod ().getResultProcessor ().getReturnedType (), builder , provider );
273276 }
0 commit comments