项目场景:

假设有三个表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  ……

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐