注意避坑啦!
最近我和春春遇到了枚举类无法正常从数据库中取出的问题
表象就是NewOrderStatus newOrderStatus这个枚举字段一直都是null,但是同一个do中的其他枚举字段都是正常取出的。
没办法只能逐层排查,最终定位到了问题,在枚举处理器中,我们看到code的Class是Long,看来问题应该就是mysql驱动从数据库中取字段类型有偏差导致的。
再往深层找,我们能够看到,在com.mysql.jdbc.ResultSetImpl#getObject(int)这个方法里面从数据库中取出的字段经过处理变成了程序拿到的数据对象。
我们可以来品一品它对字段的处理和判断
在这里我们可以看到如果你的SQLType是int并且字段是无符号的,那么当字段的mysqlType属性不是Int类型就会被转成Long
我们可以看到它的确被识别成了mysql里的long即使它只是个 unsigned int(1)
今天太晚了,明天有空可以整理一下可能有哪些字段组合可能导致这样的问题。