当前使用版本(必填,否则不予处理)

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

Comment From: miemieYaho

那你看执行的sql呢

Comment From: abc136609517

执行的SQL是正常的 没啥问题

Comment From: miemieYaho

我是指两种sql的select时指定的字段

Comment From: abc136609517

正常service的操作: lambdaQuery() .page(page);

不正常service的操作: lambdaQuery() .select(PointRecord::getUserId,PointRecord::getPointType,PointRecord::getCreateTime) .page(page);

Comment From: abc136609517

也就是说 不能使用.select() 去指定字段去查询 只能不写.select(),查全部字段就正常

Comment From: miemieYaho

是执行的sql!!!

Comment From: abc136609517

SELECT user_id,ptype AS pointType,begin_points,points,end_points,ctime AS createTime FROM hhz_point_record DESC LIMIT 0,10

Comment From: abc136609517

没明白你要看执行的sql有啥用的 因为这个原因很明显是执行完sql之后没走处理 这个sql在数据库执行 都是有数据的 也就是枚举类型的字段值是1 typeHandler字段的值是1595655196481 在service中执行完返回的page的records列表数据中的枚举类型是null typeHandler字段值也是null

Comment From: miemieYaho

不明白你就知道一定是没走处理了?把你两种方式的select的sql都发一下

Comment From: abc136609517

正常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

Comment From: abc136609517

我打断点测试过 service中lambdaQuery如果指定select查询字段 确实不会走进处理器

Comment From: miemieYaho

用 3.3.3.7-SNAPSHOT,仓库: https://oss.sonatype.org/content/repositories/snapshots/

Comment From: abc136609517

好的 测试可以了

Comment From: abc136609517

这个快照版本 PaginationInnerInterceptor文件缺少net.sf.jsqlparser包 启动项目报错: Factory method 'mybatisPlusInterceptor' threw exception; nested exception is java.lang.NoClassDefFoundError: net/sf/jsqlparser/expression/Function

Comment From: miemieYaho

检查 jsqlparser 版本冲突

Comment From: abc136609517

并没有什么冲突的

Comment From: abc136609517

用maven helper查看只有mybatis-plus-core中有依赖关系

Comment From: miemieYaho

extension 是依赖 core的, https://gitee.com/baomidou/mybatis-plus-samples/blob/master/mybatis-plus-sample-pagination/src/test/java/com/baomidou/mybatisplus/samples/pagination/PaginationTest.java

Comment From: abc136609517

是啊 那现在是什么原因呢?

Comment From: abc136609517

没找到有冲突的jar

Comment From: abc136609517

我换回3.3.2版本是正常的net.sf.jsqlparser包 换回你说的快照版本就不行 启动报错 PaginationInnerInterceptor文件缺少net.sf.jsqlparser包是报红的 未引入

Comment From: beyoug

@miemieYaho 确认遇到类似问题,QueryWrapper在select()指定字段(包含枚举)的时候,枚举转换器他不工作。

Comment From: abc136609517

@VeChar 你升级版本就行 最新3.3.3.7-SNAPSHOT是可以的 这个3.3.3应该正式版应该还没发布

Comment From: beyoug

@VeChar 你升级版本就行 最新3.3.3.7-SNAPSHOT是可以的 这个3.3.3应该正式版应该还没发布

好的,谢谢。

Comment From: abc136609517

@miemieYaho 这个问题解决了 但是我发现主键ID又是NULL了 主键ID使用了@TableId("XX") 这样会导致查出来的ID为NULL

Comment From: miemieYaho

3.3.3.8-SNAPSHOT

Comment From: sabrinawen

3.4.2 同问