SQLSyntaxErrorException 异常
报错
java.sql.SQLSyntaxErrorException: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'gu.create_time' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
报错分析
这个错误是由于数据库的 sql_mode
配置为 only_full_group_by
,导致查询中的 ORDER BY 子句与 GROUP BY 子句的列不兼容引起的。
错误代码
坐标 XxMapper.xml
GROUP BY
gu.elevator_type,gu.elevator_name,gu.entry_location_record
HAVING
DATEDIFF(NOW(),MAX( gu.maintenance_time )) > 15
order by gu.create_time desc
尝试过用 MAX(gu.create_time)
, 但还是报错。
>
是大于号的意思。具体可参考这篇文章:mybatis的特殊符号:&;<;>;”;&apos;_mybatis &_会飞的猫不吃鱼的博客-CSDN博客
解决方法
在业务层面上修改代码,进行对数据列表排序,在结果视图 VO 里面写个比较器,然后使用。(也可在业务类利用匿名内部类写比较器)
比较器代码如下:
坐标 XxVO.java
/**
* 按最后一次维保时间 - 降序排序
*/
public static class TimeComparator implements Comparator<OvertimeAlarmVO> {
@Override
public int compare(OvertimeAlarmVO a, OvertimeAlarmVO b) {
return b.getLastTime().compareTo(a.getLastTime());
}
}
修改使用:
坐标 XxServiceImpl.java
@Service
@Slf4j
public class TestServiceImpl extends BaseServiceImpl<TestMapper, TestEntity>
implements ITestService {
@Override
public Page<OvertimeAlarmVO> overtimeAlarm(OvertimeAlarmReqDTO reqDTO) {
Page<OvertimeAlarmVO> page = new Page<>();
page.setCurrent(reqDTO.getCurrent());
page.setSize(reqDTO.getSize());
List<OvertimeAlarmVO> overtimeAlarmList = this.baseMapper.overtimeAlarm(reqDTO);
overtimeAlarmList.sort(new OvertimeAlarmVO.TimeComparator()); // 使用比较器
int total = overtimeAlarmList.size();
int fromIndex = (reqDTO.getCurrent() - 1) * reqDTO.getSize();
int toIndex = Math.min(fromIndex + reqDTO.getSize(), total);
List<OvertimeAlarmVO> pagedOvertimeAlarmList = overtimeAlarmList.subList(fromIndex, toIndex);
Page<OvertimeAlarmVO> resPage = new Page<>();
resPage.setCurrent(reqDTO.getCurrent());
resPage.setSize(reqDTO.getSize());
resPage.setRecords(pagedOvertimeAlarmList);
resPage.setTotal(total);
return resPage;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189746.html