218 Star 2.4K Fork 476

MyBatis-Flex / MyBatis-Flex

 / 详情

[功能建议]: pageAs查询时VO中的字段映射,不应该处理嵌套的List对象。

已关闭
创建于  
2024-04-11 15:23

您的功能建议是否和某个问题相关:

当我使用pageAs去查询返回A对象时,由于A对象中有嵌套List对象,刚好B对象中有个字段与A对象字段名称相同。这个时候返回的结果框架帮我创建了一个B对象(只有一个字段有值),放入了list集合中。我的预期仅仅是希望返回A对象中能与数据库字段匹配上的值。并不希望框架帮我处理嵌套对象。

您希望看到什么解决方案:

框架不会帮我在list集合中创建一个只有一个字段有值的对象。或者增加一种注解,可以过滤掉某些字段。类似@Column(ignore = true)的功能?

您考虑过哪些替代方案:

您有哪些其他上下文或截图:

评论 (18)

QiaoBa 创建了任务
QiaoBa 添加了
 
enhancement
标签
展开全部操作日志

建议结合实例描述一下。

返回对象

比如上图是需要返回的VO对象。通过pageAs(单表查询订单),查询出分页订单信息。然后后续再通过订单ID去查询员工信息,最后将订单信息跟员工信息组装在一起,返回给前端。目前的问题是框架这边会在pageAs查询返回结果的时候,就往orderEmployeeList集合中放入了一个OrderEmployee对象,只有mchID有值,其他值是空的。如果这个时候通过订单ID未查询到员工信息(没有覆盖orderEmployeeList值),那么返回给前端的就是脏数据了。

@QiaoBa 框架查出来的数据有问题吗?

查出来的数据没有问题,pageAs数据映射的结果有问题。
这只是一个单表的分页查询
这个orderItemList不应该有值

orderItemList不应该有值。pageAs映射的时候,自动赋值了。

检查一下这个字段有没有重复?

orderItemList字段没有重复,mchId是父子级都有这个字段

最新版本吗?看一下最终执行的 SQL 有没有自动添加别名区分相同名称的字段。

最新版本。 SELECT o_sto_order.* FROM o_sto_order;
确认没有字段重名

你看最终执行的 SQL SELECT 里面有没有两个 mch_id

没有哦。我用的是
QueryWrapper query = new QueryWrapper();
query.select(STO_ORDER.ALL_COLUMNS);
所以生成的sql是SELECT o_sto_order.*。
然后我看了下源码,应该是FlexDefaultResultSetHandler中处理nested对象的时候,是拿查询出来的数据去做匹配映射的。刚好查出来的主对象数据中有mchId,就把嵌套对象中的mchId也赋值了

使用问题,应该使用 STO_ORDER.DEFAULT_COLUMNS

使用STO_ORDER.DEFAULT_COLUMNS也有一样的问题。
SELECT o_sto_order.id, o_sto_order.mch_id, o_sto_order.remark, o_sto_order.status, o_sto_order.cashier, o_sto_order.del_flag, o_sto_order.order_no, o_sto_order.pay_time, o_sto_order.store_id, o_sto_order.version, o_sto_order.cash_time, o_sto_order.create_by, o_sto_order.member_id, o_sto_order.order_tag, o_sto_order.read_flag, o_sto_order.serial_no, o_sto_order.update_by, o_sto_order.employees, o_sto_order.owner_type, o_sto_order.create_time, o_sto_order.member_name, o_sto_order.order_items, o_sto_order.order_price, o_sto_order.pay_order_no, o_sto_order.update_time, o_sto_order.history_flag, o_sto_order.member_phone, o_sto_order.appointment_id, o_sto_order.order_pay_price, o_sto_order.settlement_time, o_sto_order.order_actual_price, o_sto_order.settlement_status FROM o_sto_order

你这个 select 里面查了一个 mch_id,但是你实体类里面有两个 mchId 属性,mch_id 的值都赋值进去了。你需要通过别名的方式区分一下这两个 mchId,参考 @ColumnAlias 的使用。

我明白。我的意思是嵌套对象是list的情况下,如果没有配置一对多关联关系的情况下。是否不应该去给list对象做值映射处理。给list中的对象去赋值,并没有太大的意义,因为值都是一样的。给普通的嵌套对象去赋值还说的过去,毕竟是一对一的。

字段名和属性名一样就会做赋值处理。

QiaoBa 任务状态待办的 修改为已关闭

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(3)
7984572 suomm 1698661375
1
https://gitee.com/mybatis-flex/mybatis-flex.git
git@gitee.com:mybatis-flex/mybatis-flex.git
mybatis-flex
mybatis-flex
MyBatis-Flex

搜索帮助

344bd9b3 5694891 D2dac590 5694891