mybatis 中collection用法_列名重复问题

哦特Man 2016-09-13 02:25:22
问题描述:
A表和B表左连接 条件A.id=B.id
A表和C表左连接 条件A.id=C.id
B表和C表左连接 条件B.name=C.name
需要用到2个不同的C表集合,但是用下面的作法,集合C2没有取到值(其实用sql可以取到)。
调查发现集合C1,C2是用的同一个表结构,sql执行后,列名重复,所以C2没有取到值,请问这个问题该怎么解决?
sql:
SELECT
A.*,B.*,C1.*,C2.*
FROM
A
LEFT JOIN B ON A.ID = B.ID
LEFT JOIN C AS C1 ON A.ID = C1.ID
LEFT JOIN C AS C2 ON B.NAME = C2.NAME


查询用到的entity
@SuppressWarnings("PMD.UnusedPrivateField")
@Getter
@Setter
public class Entity implements Serializable {

private AEntity A;
private BEntity B;
private List<CEntity> C1;
private List<CEntity> C2;

}


mybatis用到的xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="xx.xx.xxx.MybatisMapper">
<resultMap id="resultMap_XXXXXXXXX"
type="xx.xx.xxx.Entity "
autoMapping="true" >
<association property="A" resultMap="xx.xx.resultMap_AEntity" />
<association property="B" resultMap="xx.xx.resultMap_BEntity" />
<collection property="C1" resultMap="xx.xx.resultMap_C1Entity" />
<collection property="C2" resultMap="xx.xx.resultMap_C2Entity" />
</resultMap>

<select id="select_result" resultOrdered="true"
resultMap="resultMap_XXXXXXXXX"
parameterType="xx.xx.xxx.MybatisParameter"
fetchSize="500">
SELECT
A.*,B.*,C1.*,C2.*
FROM
A
LEFT JOIN B ON A.ID = B.ID
LEFT JOIN C AS C1 ON A.ID = C1.ID
LEFT JOIN C AS C2 ON B.NAME = C2.NAME
</select>
</mapper>





...全文
1044 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqiuyu1989 2017-06-20
  • 打赏
  • 举报
回复
楼主怎么解决的?遇到同样问题
哦特Man 2016-09-16
  • 打赏
  • 举报
回复
已解决
sk815 2016-09-13
  • 打赏
  • 举报
回复
引用 6 楼 qilusoft2255 的回复:
[quote=引用 3 楼 sk815 的回复:] [quote=引用 2 楼 qilusoft2255 的回复:] [quote=引用 1 楼 sk815 的回复:] as 用别名区分·····这么多表 就别用*
如果表C中是多表连接查询显示的结果,用*仅代表把里面的列全取出[/quote] 那如果列名相同不就出问题了吗··· 多表联合查询 association  可以传入参数再申明个查询方法···业务明了 多查一次没什么···你这样写就是埋坑···[/quote] 我想知道,有什么办法避免这种因为查询出来的结果中C1中列名和C2中列名重复,C2的列名自动修改, 而导致C2查询的值映射到代码中的值不对的问题 A和C是多对多的关系[/quote] association  可以重新写个查询来装填你需要的集合··这样可以避免数据混乱(具体可以百度下 在这我就不详细说了 ·)
哦特Man 2016-09-13
  • 打赏
  • 举报
回复
引用 3 楼 sk815 的回复:
[quote=引用 2 楼 qilusoft2255 的回复:] [quote=引用 1 楼 sk815 的回复:] as 用别名区分·····这么多表 就别用*
如果表C中是多表连接查询显示的结果,用*仅代表把里面的列全取出[/quote] 那如果列名相同不就出问题了吗··· 多表联合查询 association  可以传入参数再申明个查询方法···业务明了 多查一次没什么···你这样写就是埋坑···[/quote] 我想知道,有什么办法避免这种因为查询出来的结果中C1中列名和C2中列名重复,C2的列名自动修改, 而导致C2查询的值映射到代码中的值不对的问题 A和C是多对多的关系
sk815 2016-09-13
  • 打赏
  • 举报
回复
对了····你用了那么多左连··那边如果a 表和其他是1对多的关系····那么查出来的c表什么的list 长度只有1 数据不对了
vswen5 2016-09-13
  • 打赏
  • 举报
回复
这么多左连接 ....
sk815 2016-09-13
  • 打赏
  • 举报
回复
引用 2 楼 qilusoft2255 的回复:
[quote=引用 1 楼 sk815 的回复:] as 用别名区分·····这么多表 就别用*
如果表C中是多表连接查询显示的结果,用*仅代表把里面的列全取出[/quote] 那如果列名相同不就出问题了吗··· 多表联合查询 association  可以传入参数再申明个查询方法···业务明了 多查一次没什么···你这样写就是埋坑···
哦特Man 2016-09-13
  • 打赏
  • 举报
回复
引用 1 楼 sk815 的回复:
as 用别名区分·····这么多表 就别用*
如果表C中是多表连接查询显示的结果,用*仅代表把里面的列全取出
sk815 2016-09-13
  • 打赏
  • 举报
回复
as 用别名区分·····这么多表 就别用*

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧