@@ -201,12 +201,10 @@ public String build(MapSqlParameterSource parameterSource) {
201201
202202 SelectBuilder .SelectLimitOffset limitOffsetBuilder = createSelectClause (entity , table );
203203 SelectBuilder .SelectWhere whereBuilder = applyLimitAndOffset (limitOffsetBuilder );
204- criteria = applyScrollCriteria (criteria , scrollPosition , sort );
205204
206205 SelectBuilder .SelectOrdered selectOrderBuilder = applyCriteria (criteria , entity , table , parameterSource ,
207206 whereBuilder );
208207
209- sort = applyCriteriaOrderBy (sort , scrollPosition );
210208 selectOrderBuilder = applyOrderBy (sort , entity , table , selectOrderBuilder );
211209
212210 SelectBuilder .BuildSelect completedBuildSelect = selectOrderBuilder ;
@@ -219,7 +217,7 @@ public String build(MapSqlParameterSource parameterSource) {
219217 return SqlRenderer .create (renderContextFactory .createRenderContext ()).render (select );
220218 }
221219
222- Sort applyCriteriaOrderBy (Sort sort , @ Nullable ScrollPosition scrollPosition ) {
220+ Sort applyScrollOrderBy (Sort sort , @ Nullable ScrollPosition scrollPosition ) {
223221 if (!(scrollPosition instanceof KeysetScrollPosition ) || scrollPosition .isInitial ())
224222 return sort ;
225223
@@ -257,28 +255,26 @@ Sort applyCriteriaOrderBy(Sort sort, @Nullable ScrollPosition scrollPosition) {
257255 .and (Sort .by (defaultSort , notSorted .toArray (new String [0 ])));
258256 }
259257
260- Criteria applyScrollCriteria (Criteria criteria , @ Nullable ScrollPosition position , Sort sort ) {
258+ Criteria applyScrollCriteria (@ Nullable ScrollPosition position , Sort sort ) {
261259 if (!(position instanceof KeysetScrollPosition keyset )
262260 || position .isInitial ()
263261 || keyset .getKeys ().isEmpty ()) {
264- return criteria ;
262+ return Criteria . empty () ;
265263 }
266264
267265 Map <String , Object > keys = keyset .getKeys ();
268266 List <String > columns = new ArrayList <>(keys .keySet ());
269267 List <Object > values = new ArrayList <>(keys .values ());
270268
271269 if (columns .isEmpty () || values .isEmpty ())
272- return criteria ;
270+ return Criteria . empty () ;
273271
274272 Map <String , Sort .Direction > directions =
275273 sort .stream ().collect (Collectors .toMap (Sort .Order ::getProperty , Sort .Order ::getDirection ));
276274
277275 Sort .Direction dir = directions .getOrDefault (columns .get (0 ), Sort .DEFAULT_DIRECTION );
278276
279- Criteria scroll = buildKeysetCriteria (columns , values , keyset .scrollsForward (), dir );
280-
281- return criteria .and (scroll );
277+ return buildKeysetCriteria (columns , values , keyset .scrollsForward (), dir );
282278 }
283279
284280 Criteria buildKeysetCriteria (List <String > columns , List <Object > values , boolean isForward , Sort .Direction dir ) {
@@ -313,16 +309,22 @@ Criteria buildKeysetCriteria(List<String> columns, List<Object> values, boolean
313309 SelectBuilder .SelectOrdered applyOrderBy (Sort sort , RelationalPersistentEntity <?> entity , Table table ,
314310 SelectBuilder .SelectOrdered selectOrdered ) {
315311
316- return sort .isSorted () ? //
317- selectOrdered .orderBy (queryMapper .getMappedSort (table , sort , entity )) //
312+ Sort resultSort = applyScrollOrderBy (sort , scrollPosition );
313+
314+ return resultSort .isSorted () ? //
315+ selectOrdered .orderBy (queryMapper .getMappedSort (table , resultSort , entity )) //
318316 : selectOrdered ;
319317 }
320318
321319 SelectBuilder .SelectOrdered applyCriteria (@ Nullable Criteria criteria , RelationalPersistentEntity <?> entity ,
322320 Table table , MapSqlParameterSource parameterSource , SelectBuilder .SelectWhere whereBuilder ) {
323321
324- return criteria != null && !criteria .isEmpty () //
325- ? whereBuilder .where (queryMapper .getMappedObject (parameterSource , criteria , table , entity )) //
322+ Criteria resultCriteria = criteria == null
323+ ? applyScrollCriteria (scrollPosition , sort )
324+ : criteria .and (applyScrollCriteria (scrollPosition , sort ));
325+
326+ return !resultCriteria .isEmpty ()
327+ ? whereBuilder .where (queryMapper .getMappedObject (parameterSource , resultCriteria , table , entity )) //
326328 : whereBuilder ;
327329 }
328330
0 commit comments