目前我存在一个线上的问题,经排查发现可能是是由于查询时order by根据更新时间排序,但是更新时间都是同一时间导致。
网上大量重复资源,感觉最靠谱的一个如下:
https://www.cnblogs.com/codingchangeworld/p/15834849.html
为了验证是因为这个原因导致的数据重复创建如下测试DEMO,但无法复现场景,求大佬教教我该怎么复现
/**
* mysql 排序字段相同时,排序返回是否有序,如果发生乱序,那么set肯定会重复
* 例如: id=1 page=1 id=1 page=3 相同id在第一页和第三页同时出现
*/
@Test
public void pageBySameTimeSortTest(){
IPage<IbcUsdTrade> page = new Page<>();
Map<Long,Long> trades = new HashMap<>();
LambdaQueryWrapper<IbcUsdTrade> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(IbcUsdTrade::getRecUpdateTime,"2022-11-21 12:33:06");
wrapper.orderByAsc(IbcUsdTrade::getRecUpdateTime);
page.setSize(10);
boolean flag = false;
for (int i = 1; i <= 50;) {
page.setCurrent(i++);
IPage<IbcUsdTrade> result = ibcUsdTradeMapper.selectPage(page, wrapper);
List<IbcUsdTrade> records = result.getRecords();
for (int i1 = 0; i1 < records.size(); i1++) {
if (trades.containsKey(records.get(i1).getId())) {
flag = true;
System.out.print("位置两个id不相同"+records.get(i1).getId()+","+trades.get(records.get(i1).getId())+","+page.getCurrent());
break;
}
trades.put(records.get(i1).getId(),page.getCurrent());
}
Assert.isTrue(!flag,"存在不相同的数");
}
}