One record is expected, but the query result is multiple records
经排查发现,MP提供的BaseMapper.java
>selectOne
方法,其内部查询到多条记录时会报错(版本:3.5.1),代码如下:
/**
* 根据 entity 条件,查询一条记录
* <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {
List<T> ts = this.selectList(queryWrapper);
if (CollectionUtils.isNotEmpty(ts)) {
if (ts.size() != 1) {
throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");
}
return ts.get(0);
}
return null;
}
解决办法:确保参数queryWrapper
条件最终只会得到空集或者有且仅有一条记录的集合。
注意:实际情况下,你需要根据具体业务场景做出判断--若期望查询到多条记录时抛出异常,则什么都不用做了,若期望查询到多条记录时只需返回其中一条,则需要在条件中添加
.last("limit 1")
以排除可能查询到多条记录的情况。