今天遇到一个奇葩的bug,先贴bug图。
异常描述:nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2,
报错显示我的selectById 查到了两个,说明有重复数据,我就拿id 去数据库里对比了一下
查询条件的id:1853683755149516801
数据库里可以看到,801的数据只有一条,但是有一条特别接近的800
带着sql去查下数据库,还真的查出来两条,但是仔细对比发现,两个数据非常接近,但是确实不是一样的。
我就想是不是bigint类型的问题,我换成string试试。
神医!立马就好了,问题果然就是bigint,一整个无语住了。
之前看都在说bigint的查询速度和存储空间占用都优于varchar,没想到出了这个bug。
解决办法也很简单,把这个id用string.valueOf()转一下就行。
本人用id字段大部分还是varchar比较多,有时候用uuid 生成主键插入的时候很方便,第一次用bigint就出现这种情况。