mybatis一对多映射中相同数据合并只显示一条数据的问题解决方案
假设有三个表A,B,C。表A是主表,表A嵌套了表B,表B嵌套了表C。表A和表B的关系是一对多;表B和表C是多对多关系。现今需要关联查询三张表的结果。
·
项目场景:
假设有三个表A,B,C。表A是主表,表A嵌套了表B, 表B嵌套了表C。表A和表B的关系是一对多;表B和表C是多对多关系。现今需要关联查询三张表的结果。
问题描述
如果表A嵌套了2条表B的数据,如果表B的两条数据是相同的,那么结果只显示一条表B的数据。
效果如下:
![]()
嵌套映射如下:
表A和表B的关系是一对多;表B和表C是多对多关系。现在表A是 VendorApply(红色框住的id 是表A); 表B是Vendor(黄色框住的id是表B); 表C是PFile(蓝色框住部分)

原因分析:
情况1:做映射时没有将表的主键id做映射。只需为每个表做Id映射。
<id column="id" property="id"></id>

情况2:表A的主键和表B的主键列名是相同的。只需要将两张表的列名区分开即可。
解决方案:
针对于情况2的解决方案:
方法1:在mapper.xml 文件做主键映射,为字段做别名映射。

方法2:修改数据库字段,将表A和表B的主键列名重新修改成不一样的即可。如表A的主键字段设置为 AID, 表B的主键字段设置为BID。
总结:
- 做映射时,需要为每个表做主键映射:<id column="id" property="id"></id>
- 查询时,如果做了主键映射,需要把数据库主键 id 字段查询出来。
如 select id, username, from ……
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)