一、问题
在涉及多表查询的时候,使用collection元素来映射集合属性时,出现了只能查询到一条数据的情况,但用sql语句在数据库中查询会有多条记录。
二、原因
如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。所以涉及查询所用的表的主键的命名不要相同,否则会混淆。
三、解决
如果关联查询的两个表的主键已经相同了,如表早就已经建好了,现在也不可能改表字段了,那么只需要查询时给关联表查询字段给个不一样的别名即可。
<!-- 通用查询映射结果 --><resultMap id="UserResultMap" type="com.gd.mqtest.domain.User"><id column="id" property="id"/><result column="name" property="name"/><result column="age" property="age"/><result column="email" property="email"/><!--<collection property="userDetails" javaType="java.util.ArrayList" ofType="com.gd.mqtest.domain.UserDetail">--><!-- <id column="t_id" property="id" />--><!-- <result column="user_id" property="userId" />--><!-- <result column="color" property="color" />--><!--</collection>--></resultMap><select id="select" resultMap="UserResultMap">select u.id, u.name, u.age, u.email,ud.id t_id, ud.user_id, ud.color from user u join user_detail ud on u.id=ud.user_id</select>