49
49
*/
50
50
abstract class AbstractStringBasedJpaQuery extends AbstractJpaQuery {
51
51
52
- private final DeclaredQuery query ;
53
- private final Lazy <DeclaredQuery > countQuery ;
52
+ private final StringQuery query ;
53
+ private final Lazy <IntrospectedQuery > countQuery ;
54
54
private final ValueExpressionDelegate valueExpressionDelegate ;
55
55
private final QueryRewriter queryRewriter ;
56
56
private final QuerySortRewriter querySortRewriter ;
@@ -65,37 +65,32 @@ abstract class AbstractStringBasedJpaQuery extends AbstractJpaQuery {
65
65
* @param em must not be {@literal null}.
66
66
* @param queryString must not be {@literal null}.
67
67
* @param countQueryString must not be {@literal null}.
68
- * @param queryRewriter must not be {@literal null}.
69
- * @param valueExpressionDelegate must not be {@literal null}.
68
+ * @param queryConfiguration must not be {@literal null}.
70
69
*/
71
70
public AbstractStringBasedJpaQuery (JpaQueryMethod method , EntityManager em , String queryString ,
72
- @ Nullable String countQueryString , QueryRewriter queryRewriter , ValueExpressionDelegate valueExpressionDelegate ) {
71
+ @ Nullable String countQueryString , JpaQueryConfiguration queryConfiguration ) {
73
72
74
73
super (method , em );
75
74
76
75
Assert .hasText (queryString , "Query string must not be null or empty" );
77
- Assert .notNull (valueExpressionDelegate , "ValueExpressionDelegate must not be null" );
78
- Assert .notNull (queryRewriter , "QueryRewriter must not be null" );
76
+ Assert .notNull (queryConfiguration , "JpaQueryConfiguration must not be null" );
79
77
80
- this .valueExpressionDelegate = valueExpressionDelegate ;
78
+ this .valueExpressionDelegate = queryConfiguration . getValueExpressionDelegate () ;
81
79
this .valueExpressionContextProvider = valueExpressionDelegate .createValueContextProvider (method .getParameters ());
82
- this .query = new ExpressionBasedStringQuery (queryString , method .getEntityInformation (), valueExpressionDelegate ,
83
- method .isNativeQuery ());
80
+ this .query = ExpressionBasedStringQuery .create (queryString , method , queryConfiguration );
84
81
85
82
this .countQuery = Lazy .of (() -> {
86
83
87
84
if (StringUtils .hasText (countQueryString )) {
88
-
89
- return new ExpressionBasedStringQuery (countQueryString , method .getEntityInformation (), valueExpressionDelegate ,
90
- method .isNativeQuery ());
85
+ return ExpressionBasedStringQuery .create (countQueryString , method , queryConfiguration );
91
86
}
92
87
93
- return query .deriveCountQuery (method .getCountQueryProjection ());
88
+ return this . query .deriveCountQuery (method .getCountQueryProjection ());
94
89
});
95
90
96
91
this .countParameterBinder = Lazy .of (() -> this .createBinder (this .countQuery .get ()));
97
92
98
- this .queryRewriter = queryRewriter ;
93
+ this .queryRewriter = queryConfiguration . getQueryRewriter ( method ) ;
99
94
100
95
JpaParameters parameters = method .getParameters ();
101
96
@@ -109,7 +104,7 @@ public AbstractStringBasedJpaQuery(JpaQueryMethod method, EntityManager em, Stri
109
104
}
110
105
}
111
106
112
- Assert .isTrue (method .isNativeQuery () || !query .usesJdbcStyleParameters (),
107
+ Assert .isTrue (method .isNativeQuery () || !this . query .usesJdbcStyleParameters (),
113
108
"JDBC style parameters (?) are not supported for JPA queries" );
114
109
}
115
110
@@ -136,7 +131,7 @@ protected ParameterBinder createBinder() {
136
131
return createBinder (query );
137
132
}
138
133
139
- protected ParameterBinder createBinder (DeclaredQuery query ) {
134
+ protected ParameterBinder createBinder (IntrospectedQuery query ) {
140
135
return ParameterBinderFactory .createQueryAwareBinder (getQueryMethod ().getParameters (), query ,
141
136
valueExpressionDelegate , valueExpressionContextProvider );
142
137
}
@@ -162,14 +157,14 @@ protected Query doCreateCountQuery(JpaParametersParameterAccessor accessor) {
162
157
/**
163
158
* @return the query
164
159
*/
165
- public DeclaredQuery getQuery () {
160
+ public EntityQuery getQuery () {
166
161
return query ;
167
162
}
168
163
169
164
/**
170
165
* @return the countQuery
171
166
*/
172
- public DeclaredQuery getCountQuery () {
167
+ public IntrospectedQuery getCountQuery () {
173
168
return countQuery .get ();
174
169
}
175
170
@@ -211,16 +206,15 @@ protected String potentiallyRewriteQuery(String originalQuery, Sort sort, @Nulla
211
206
}
212
207
213
208
String applySorting (CachableQuery cachableQuery ) {
214
-
215
- return QueryEnhancerFactory .forQuery (cachableQuery .getDeclaredQuery ())
209
+ return cachableQuery .getDeclaredQuery ().getQueryEnhancer ()
216
210
.rewrite (new DefaultQueryRewriteInformation (cachableQuery .getSort (), cachableQuery .getReturnedType ()));
217
211
}
218
212
219
213
/**
220
214
* Query Sort Rewriter interface.
221
215
*/
222
216
interface QuerySortRewriter {
223
- String getSorted (DeclaredQuery query , Sort sort , ReturnedType returnedType );
217
+ String getSorted (StringQuery query , Sort sort , ReturnedType returnedType );
224
218
}
225
219
226
220
/**
@@ -230,25 +224,24 @@ enum SimpleQuerySortRewriter implements QuerySortRewriter {
230
224
231
225
INSTANCE ;
232
226
233
- public String getSorted (DeclaredQuery query , Sort sort , ReturnedType returnedType ) {
234
-
235
- return QueryEnhancerFactory .forQuery (query ).rewrite (new DefaultQueryRewriteInformation (sort , returnedType ));
227
+ public String getSorted (StringQuery query , Sort sort , ReturnedType returnedType ) {
228
+ return query .getQueryEnhancer ().rewrite (new DefaultQueryRewriteInformation (sort , returnedType ));
236
229
}
237
230
}
238
231
239
232
static class UnsortedCachingQuerySortRewriter implements QuerySortRewriter {
240
233
241
234
private volatile @ Nullable String cachedQueryString ;
242
235
243
- public String getSorted (DeclaredQuery query , Sort sort , ReturnedType returnedType ) {
236
+ public String getSorted (StringQuery query , Sort sort , ReturnedType returnedType ) {
244
237
245
238
if (sort .isSorted ()) {
246
239
throw new UnsupportedOperationException ("NoOpQueryCache does not support sorting" );
247
240
}
248
241
249
242
String cachedQueryString = this .cachedQueryString ;
250
243
if (cachedQueryString == null ) {
251
- this .cachedQueryString = cachedQueryString = QueryEnhancerFactory . forQuery ( query )
244
+ this .cachedQueryString = cachedQueryString = query . getQueryEnhancer ( )
252
245
.rewrite (new DefaultQueryRewriteInformation (sort , returnedType ));
253
246
}
254
247
@@ -267,7 +260,7 @@ class CachingQuerySortRewriter implements QuerySortRewriter {
267
260
private volatile @ Nullable String cachedQueryString ;
268
261
269
262
@ Override
270
- public String getSorted (DeclaredQuery query , Sort sort , ReturnedType returnedType ) {
263
+ public String getSorted (StringQuery query , Sort sort , ReturnedType returnedType ) {
271
264
272
265
if (sort .isUnsorted ()) {
273
266
@@ -292,21 +285,21 @@ public String getSorted(DeclaredQuery query, Sort sort, ReturnedType returnedTyp
292
285
*/
293
286
static class CachableQuery {
294
287
295
- private final DeclaredQuery declaredQuery ;
288
+ private final StringQuery query ;
296
289
private final String queryString ;
297
290
private final Sort sort ;
298
291
private final ReturnedType returnedType ;
299
292
300
- CachableQuery (DeclaredQuery query , Sort sort , ReturnedType returnedType ) {
293
+ CachableQuery (StringQuery query , Sort sort , ReturnedType returnedType ) {
301
294
302
- this .declaredQuery = query ;
295
+ this .query = query ;
303
296
this .queryString = query .getQueryString ();
304
297
this .sort = sort ;
305
298
this .returnedType = returnedType ;
306
299
}
307
300
308
- DeclaredQuery getDeclaredQuery () {
309
- return declaredQuery ;
301
+ StringQuery getDeclaredQuery () {
302
+ return query ;
310
303
}
311
304
312
305
Sort getSort () {
0 commit comments