Skip to content

Commit 6af9fe9

Browse files
committed
fix: remove unexpected sort creation when column already in sort
Signed-off-by: Artemiy Chereshnevvv <[email protected]>
1 parent 842cc20 commit 6af9fe9

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StatementFactory.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.data.relational.core.dialect.RenderContextFactory;
2525
import org.springframework.data.relational.core.mapping.AggregatePath;
2626
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
27+
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
2728
import org.springframework.data.relational.core.query.Criteria;
2829
import org.springframework.data.relational.core.sql.*;
2930
import org.springframework.data.relational.core.sql.render.SqlRenderer;
@@ -222,11 +223,29 @@ Sort applyCriteriaOrderBy(Sort sort, @Nullable ScrollPosition scrollPosition) {
222223
if (!(scrollPosition instanceof KeysetScrollPosition) || scrollPosition.isInitial())
223224
return sort;
224225

225-
Set<String> orders = sort.get().map(Sort.Order::getProperty).collect(Collectors.toSet());
226+
Set<String> orders = sort.get()
227+
.map(Sort.Order::getProperty)
228+
.map(it -> {
229+
RelationalPersistentProperty prop = entity.getPersistentProperty(it);
230+
if (prop == null)
231+
return it;
232+
233+
return prop.getColumnName().getReference();
234+
})
235+
.collect(Collectors.toSet());
226236

227237
Set<String> keys = ((KeysetScrollPosition) scrollPosition).getKeys().keySet();
228238

229-
Set<String> notSorted = keys.stream().filter(it -> !orders.contains(it)).collect(Collectors.toSet());
239+
Set<String> notSorted = keys
240+
.stream()
241+
.map(it -> {
242+
RelationalPersistentProperty prop = entity.getPersistentProperty(it);
243+
if (prop == null)
244+
return it;
245+
246+
return prop.getColumnName().getReference();
247+
})
248+
.filter(it -> orders.stream().noneMatch(order -> order.equalsIgnoreCase(it))).collect(Collectors.toSet());
230249

231250
if (notSorted.isEmpty())
232251
return sort;
@@ -267,6 +286,10 @@ Criteria buildKeysetCriteria(List<String> columns, List<Object> values, boolean
267286
return Criteria.empty();
268287

269288
String column = columns.get(0);
289+
RelationalPersistentProperty prop = entity.getPersistentProperty(column);
290+
if (prop != null)
291+
column = prop.getColumnName().getReference();
292+
270293
Object value = values.get(0);
271294

272295
boolean isAscending = isForward ^ dir.isDescending();

0 commit comments

Comments
 (0)