@@ -226,31 +226,49 @@ private CodeBlock createQuery(String queryVariableName, String queryStringNameVa
226
226
for (ParameterBinding binding : query .getParameterBindings ()) {
227
227
228
228
Object prepare = binding .prepare ("s" );
229
+ Object parameterIdentifier = getParameterName (binding .getIdentifier ());
230
+ String valueFormat = parameterIdentifier instanceof CharSequence ? "$S" : "$L" ;
229
231
230
232
if (prepare instanceof String prepared && !prepared .equals ("s" )) {
233
+
231
234
String format = prepared .replaceAll ("%" , "%%" ).replace ("s" , "%s" );
232
- if (binding .getIdentifier ().hasPosition ()) {
233
- builder .addStatement ("$L.setParameter($L, $S.formatted($L))" , queryVariableName ,
234
- binding .getIdentifier ().getPosition (), format ,
235
- context .getParameterNameOfPosition (binding .getIdentifier ().getPosition () - 1 ));
236
- } else {
237
- builder .addStatement ("$L.setParameter($S, $S.formatted($L))" , queryVariableName ,
238
- binding .getIdentifier ().getName (), format , binding .getIdentifier ().getName ());
239
- }
235
+ builder .addStatement ("$L.setParameter(%s, $S.formatted($L))" .formatted (valueFormat ), queryVariableName ,
236
+ parameterIdentifier , format , getParameter (binding .getOrigin ()));
240
237
} else {
241
- if (binding .getIdentifier ().hasPosition ()) {
242
- builder .addStatement ("$L.setParameter($L, $L)" , queryVariableName , binding .getIdentifier ().getPosition (),
243
- context .getParameterNameOfPosition (binding .getIdentifier ().getPosition () - 1 ));
244
- } else {
245
- builder .addStatement ("$L.setParameter($S, $L)" , queryVariableName , binding .getIdentifier ().getName (),
246
- binding .getIdentifier ().getName ());
247
- }
238
+ builder .addStatement ("$L.setParameter(%s, $L)" .formatted (valueFormat ), queryVariableName , parameterIdentifier ,
239
+ getParameter (binding .getOrigin ()));
248
240
}
249
241
}
250
242
251
243
return builder .build ();
252
244
}
253
245
246
+ private Object getParameterName (ParameterBinding .BindingIdentifier identifier ) {
247
+
248
+ if (identifier .hasPosition ()) {
249
+ return identifier .getPosition ();
250
+ }
251
+
252
+ return identifier .getName ();
253
+
254
+ }
255
+
256
+ private Object getParameter (ParameterBinding .ParameterOrigin origin ) {
257
+
258
+ if (origin .isMethodArgument () && origin instanceof ParameterBinding .MethodInvocationArgument mia ) {
259
+
260
+ if (mia .identifier ().hasPosition ()) {
261
+ return context .getParameterNameOfPosition (mia .identifier ().getPosition () - 1 );
262
+ }
263
+
264
+ if (mia .identifier ().hasName ()) {
265
+ return mia .identifier ().getName ();
266
+ }
267
+ }
268
+
269
+ throw new UnsupportedOperationException ("Not supported yet" );
270
+ }
271
+
254
272
private CodeBlock applyHints (String queryVariableName , MergedAnnotation <QueryHints > queryHints ) {
255
273
256
274
Builder hintsBuilder = CodeBlock .builder ();
0 commit comments