3.3.2
在service中使用lambdaQuery().select(XXX)出现的问题.枚举值和typeHandler类型处理的字段值都为NULL
实体的字段:
//枚举字段
private PointTypeEnum pointType;
//数据库存的是varchar的一串数字, 是毫秒时间戳, 通过typeHandler将它的值转成LocalDateTime
@TableField(value = "ctime", typeHandler = BigintToDateTimeTypeHandler.class, fill = FieldFill.INSERT)
private LocalDateTime createTime;
service的操作:
lambdaQuery()
.select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime)
.page(page);
问题描述:
service中查询如果指定select字段查询, 那么枚举类型的值为NULL, 有typeHandler的字段也为NULL 并且没有走进类型处理器里(打断点没进去), 但是去掉select, 也就是查全部字段, 枚举类型的值就有了 typeHandler的处理器也会进去
数据为空 null
那你看执行的sql呢
执行的SQL是正常的 没啥问题
我是指两种sql的select时指定的字段
正常service的操作:
lambdaQuery()
.page(page);
不正常service的操作:
lambdaQuery()
.select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime)
.page(page);
也就是说 不能使用.select() 去指定字段去查询 只能不写.select(),查全部字段就正常
是执行的sql!!!
SELECT user_id,ptype AS pointType,begin_points,points,end_points,ctime AS createTime FROM hhz_point_record DESC LIMIT 0,10
没明白你要看执行的sql有啥用的 因为这个原因很明显是执行完sql之后没走处理 这个sql在数据库执行 都是有数据的
也就是枚举类型的字段值是1 typeHandler字段的值是1595655196481 在service中执行完返回的page的records列表数据中的枚举类型是null typeHandler字段值也是null
不明白你就知道一定是没走处理了?把你两种方式的select的sql都发一下
正常service的操作:
lambdaQuery()
.page(page);
执行sql语句:
SELECT * FROM hhz_point_record DESC LIMIT 0,10
不正常service的操作:
lambdaQuery()
.select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime)
.page(page);
执行sql语句:
SELECT user_id,ptype AS pointType,begin_points,points,end_points,ctime AS createTime FROM hhz_point_record DESC LIMIT 0,10
我打断点测试过 service中lambdaQuery如果指定select查询字段 确实不会走进处理器
用 3.3.3.7-SNAPSHOT,仓库: https://oss.sonatype.org/content/repositories/snapshots/
好的 测试可以了
这个快照版本
PaginationInnerInterceptor文件缺少net.sf.jsqlparser包
启动项目报错:
Factory method 'mybatisPlusInterceptor' threw exception; nested exception is java.lang.NoClassDefFoundError: net/sf/jsqlparser/expression/Function
检查 jsqlparser 版本冲突
并没有什么冲突的
用maven helper查看只有mybatis-plus-core中有依赖关系
是啊 那现在是什么原因呢?
没找到有冲突的jar
我换回3.3.2版本是正常的net.sf.jsqlparser包
换回你说的快照版本就不行 启动报错
PaginationInnerInterceptor文件缺少net.sf.jsqlparser包是报红的 未引入
@miemieYaho 确认遇到类似问题,QueryWrapper在select()指定字段(包含枚举)的时候,枚举转换器他不工作。
@VeChar 你升级版本就行 最新3.3.3.7-SNAPSHOT是可以的 这个3.3.3应该正式版应该还没发布
@VeChar 你升级版本就行 最新3.3.3.7-SNAPSHOT是可以的 这个3.3.3应该正式版应该还没发布
好的,谢谢。
@miemieYaho 这个问题解决了 但是我发现主键ID又是NULL了 主键ID使用了@TableId("XX") 这样会导致查出来的ID为NULL
用 3.3.3.8-SNAPSHOT