20
20
import jakarta .persistence .QueryHint ;
21
21
import jakarta .persistence .Tuple ;
22
22
23
- import java .lang .reflect .Type ;
24
23
import java .util .Arrays ;
25
24
import java .util .Collection ;
26
25
import java .util .List ;
@@ -160,8 +159,6 @@ public CodeBlock build() {
160
159
Assert .notNull (queries , "Queries must not be null" );
161
160
162
161
boolean isProjecting = context .getReturnedType ().isProjecting ();
163
- Class <?> actualReturnType = isProjecting ? context .getActualReturnType ().toClass ()
164
- : context .getRepositoryInformation ().getDomainType ();
165
162
166
163
String dynamicReturnType = null ;
167
164
if (queryMethod .getParameters ().hasDynamicProjection ()) {
@@ -212,7 +209,7 @@ public CodeBlock build() {
212
209
if ((StringUtils .hasText (sortParameterName ) || StringUtils .hasText (dynamicReturnType ))
213
210
&& queries != null && queries .result () instanceof StringAotQuery
214
211
&& StringUtils .hasText (queryStringVariableName )) {
215
- builder .add (applyRewrite (sortParameterName , dynamicReturnType , queryStringVariableName , actualReturnType ));
212
+ builder .add (applyRewrite (sortParameterName , dynamicReturnType , isProjecting , queryStringVariableName ));
216
213
}
217
214
218
215
builder .add (createQuery (false , queryVariableName , queryStringVariableName , queryRewriterName , queries .result (),
@@ -246,8 +243,8 @@ private CodeBlock buildQueryString(StringAotQuery sq, String queryStringVariable
246
243
return builder .build ();
247
244
}
248
245
249
- private CodeBlock applyRewrite (@ Nullable String sort , @ Nullable String dynamicReturnType , String queryString ,
250
- Class <?> actualReturnType ) {
246
+ private CodeBlock applyRewrite (@ Nullable String sort , @ Nullable String dynamicReturnType , boolean isProjecting ,
247
+ String queryString ) {
251
248
252
249
Builder builder = CodeBlock .builder ();
253
250
@@ -266,6 +263,9 @@ private CodeBlock applyRewrite(@Nullable String sort, @Nullable String dynamicRe
266
263
builder .addStatement ("$L = rewriteQuery($L, $L, $L)" , queryString , context .localVariable ("declaredQuery" ), sort ,
267
264
dynamicReturnType );
268
265
} else if (hasSort ) {
266
+
267
+ Object actualReturnType = isProjecting ? context .getActualReturnTypeName () : context .getDomainType ();
268
+
269
269
builder .addStatement ("$L = rewriteQuery($L, $L, $T.class)" , queryString , context .localVariable ("declaredQuery" ),
270
270
sort , actualReturnType );
271
271
} else if (hasDynamicReturnType ) {
@@ -657,11 +657,9 @@ public CodeBlock build() {
657
657
658
658
Builder builder = CodeBlock .builder ();
659
659
660
- boolean isProjecting = context .getActualReturnType () != null
661
- && !ObjectUtils .nullSafeEquals (TypeName .get (context .getRepositoryInformation ().getDomainType ()),
662
- context .getActualReturnType ());
663
- Type actualReturnType = isProjecting ? context .getActualReturnType ().getType ()
664
- : context .getRepositoryInformation ().getDomainType ();
660
+ boolean isProjecting = !ObjectUtils .nullSafeEquals (context .getDomainType (), context .getActualReturnTypeName ());
661
+ TypeName actualReturnType = isProjecting ? context .getActualReturnTypeName ()
662
+ : TypeName .get (context .getDomainType ());
665
663
builder .add ("\n " );
666
664
667
665
if (modifying .isPresent ()) {
@@ -775,7 +773,7 @@ public CodeBlock build() {
775
773
if (Optional .class .isAssignableFrom (context .getReturnType ().toClass ())) {
776
774
builder .addStatement ("return $T.ofNullable(($T) convertOne($L.getSingleResultOrNull(), $L, $T.class))" ,
777
775
Optional .class , actualReturnType , queryVariableName , aotQuery .isNative (),
778
- context . getActualReturnType (). toClass () );
776
+ queryResultType );
779
777
} else {
780
778
builder .addStatement ("return ($T) convertOne($L.getSingleResultOrNull(), $L, $T.class)" ,
781
779
context .getReturnTypeName (), queryVariableName , aotQuery .isNative (),
0 commit comments