31
31
import org .springframework .data .jpa .repository .query .ParameterMetadataProvider .ParameterMetadata ;
32
32
import org .springframework .data .repository .query .ParametersParameterAccessor ;
33
33
import org .springframework .data .repository .query .ResultProcessor ;
34
+ import org .springframework .data .repository .query .ReturnedType ;
34
35
import org .springframework .data .repository .query .parser .PartTree ;
35
36
36
37
/**
@@ -98,9 +99,9 @@ public TypedQuery<Long> doCreateCountQuery(Object[] values) {
98
99
@ Override
99
100
protected JpaQueryExecution getExecution () {
100
101
101
- if (this .tree .isDelete ()) {
102
+ if (this .tree .isDelete ()) {
102
103
return new DeleteExecution (em );
103
- } else if (this .tree .isExistsProjection ()) {
104
+ } else if (this .tree .isExistsProjection ()) {
104
105
return new ExistsExecution ();
105
106
}
106
107
@@ -123,7 +124,7 @@ public QueryPreparer(PersistenceProvider persistenceProvider, boolean recreateQu
123
124
124
125
this .persistenceProvider = persistenceProvider ;
125
126
126
- JpaQueryCreator creator = createCreator (null , persistenceProvider );
127
+ JpaQueryCreator creator = createCreator (persistenceProvider , Optional . empty () );
127
128
128
129
this .cachedCriteriaQuery = recreateQueries ? null : creator .createQuery ();
129
130
this .expressions = recreateQueries ? null : creator .getParameterExpressions ();
@@ -142,7 +143,7 @@ public Query createQuery(Object[] values) {
142
143
ParametersParameterAccessor accessor = new ParametersParameterAccessor (parameters , values );
143
144
144
145
if (cachedCriteriaQuery == null || accessor .hasBindableNullValue ()) {
145
- JpaQueryCreator creator = createCreator (accessor , persistenceProvider );
146
+ JpaQueryCreator creator = createCreator (persistenceProvider , Optional . of ( accessor ) );
146
147
criteriaQuery = creator .createQuery (getDynamicSort (values ));
147
148
expressions = creator .getParameterExpressions ();
148
149
}
@@ -178,7 +179,7 @@ private Query restrictMaxResultsIfNecessary(Query query) {
178
179
query .setMaxResults (tree .getMaxResults ());
179
180
}
180
181
181
- if (tree .isExistsProjection ()) {
182
+ if (tree .isExistsProjection ()) {
182
183
query .setMaxResults (1 );
183
184
}
184
185
@@ -204,19 +205,21 @@ private TypedQuery<?> createQuery(CriteriaQuery<?> criteriaQuery) {
204
205
return getEntityManager ().createQuery (criteriaQuery );
205
206
}
206
207
207
- protected JpaQueryCreator createCreator (ParametersParameterAccessor accessor ,
208
- PersistenceProvider persistenceProvider ) {
208
+ protected JpaQueryCreator createCreator (PersistenceProvider persistenceProvider ,
209
+ Optional < ParametersParameterAccessor > accessor ) {
209
210
210
211
EntityManager entityManager = getEntityManager ();
211
212
CriteriaBuilder builder = entityManager .getCriteriaBuilder ();
212
213
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 ) );
216
217
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 ();
218
221
219
- return new JpaQueryCreator (tree , resultFactory . getReturnedType () , builder , provider );
222
+ return new JpaQueryCreator (tree , returnedType , builder , provider );
220
223
}
221
224
222
225
/**
@@ -259,15 +262,15 @@ public CountQueryPreparer(PersistenceProvider persistenceProvider, boolean recre
259
262
* @see org.springframework.data.jpa.repository.query.PartTreeJpaQuery.QueryPreparer#createCreator(org.springframework.data.repository.query.ParametersParameterAccessor, org.springframework.data.jpa.provider.PersistenceProvider)
260
263
*/
261
264
@ Override
262
- protected JpaQueryCreator createCreator (ParametersParameterAccessor accessor ,
263
- PersistenceProvider persistenceProvider ) {
265
+ protected JpaQueryCreator createCreator (PersistenceProvider persistenceProvider ,
266
+ Optional < ParametersParameterAccessor > accessor ) {
264
267
265
268
EntityManager entityManager = getEntityManager ();
266
269
CriteriaBuilder builder = entityManager .getCriteriaBuilder ();
267
270
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 ) );
271
274
272
275
return new JpaCountQueryCreator (tree , getQueryMethod ().getResultProcessor ().getReturnedType (), builder , provider );
273
276
}
0 commit comments