場(chǎng)景
使用 Spring
的 spring-data-commons
這個(gè)jar包進(jìn)行 MongoDB
查詢的時(shí)候歪脏,
在寫Sort
(package 是 org.springframework.data.domain.Sort
) 的時(shí)候尝丐,遇到了一些坑,
特地記下來
問題
問題是這樣的
當(dāng)排序的時(shí)候福荸,可能會(huì)遇到同時(shí)排序好幾個(gè)字段的情況
寫法有兩種,見下面的測(cè)試代碼
Sort sort = new Sort(Sort.Direction.DESC, "weight");
Sort sort2 = new Sort(Sort.Direction.DESC, "createTime");
//不生效
sort.and(sort2);
System.out.println(sort);
//生效
Sort sort3 = new Sort(Sort.Direction.DESC, "weight").and(sort2);
System.out.println(sort3);
輸出如下:
weight: DESC
weight: DESC,createTime: DESC
發(fā)現(xiàn)直接用對(duì)象and
不生效,只有在new
的時(shí)候and
才有用
原因
剛開始還以為是BUG姓迅,后面想了想特地去看了下源碼,看下是怎么回事
public Sort and(Sort sort) {
if (sort == null) {
return this;
}
ArrayList<Order> these = new ArrayList<Order>(this.orders);
for (Order order : sort) {
these.add(order);
}
return new Sort(these);
}
原來 and
加入的對(duì)象 是存到了返回值那個(gè)新對(duì)象里俊马,而沒有去修改原來的對(duì)象队贱,
所以正確用法是
sort = sort.and(sort2);