查询数据时只能获得collection集合中的的一条数据,相关情况如下:

 

结果集resultMap:

<resultMap />
</collection>
</collection> 
</resultMap>

 

5表关联查询:

<!-- 根据用户ID获得用户及其角色和资源 -->
<select >
SELECT m.*,r.ID,r.role_name,a.ID,a.permission
FROM t_system_manager m 
LEFT JOIN 
t_system_manager_role mr ON m.ID=mr.manager_id 
LEFT JOIN t_system_role r ON mr.`role_id`=r.`ID` 
LEFT JOIN t_system_role_acl ra ON r.`ID`=ra.`role_id` 
LEFT JOIN t_system_acl a ON a.`ID`=ra.`acl_id` 
WHERE m.ID=#{id,jdbcType=BIGINT}; 
</select>

 

根据ID获得管理员:


@RequestMapping(value= {"view"},method = { RequestMethod.GET })
@ResponseBody
public TSystemManager view(HttpServletRequest request,Long id) {

TSystemManager viewManager = managerService.getRolesAndAclsByID(id);

    for(TSystemRole role : viewManager.getRoles()) {
           System.out.append("拥有的角色是:"+role.getRoleName());

                for(TSystemAcl acl : role.getAcls()) {
                     System.out.append("拥有的资源是:"+acl.getPermission());
                }
    }
   return viewManager;
}

 

在mysql通过上述5表查询语句能查询多条关于角色和资源的记录,但是通过mybatis查询获得的只有单条角色和资源的数据。

在sqlyog的查询结果

resultMap中的collection集合出现只能读取一条数据的解决方法

 

 

 

通过mybatis获得的结果

resultMap中的collection集合出现只能读取一条数据的解决方法

 

 

排查许久发现原因是:

1、主表的id字段和从表的id字段一样;

2、collection集合中包含<id column="ID" jdbcType="BIGINT" property="id" />;

 

如果同时存在上面两种情况,就只能获得collection的一条数据。

 

解决方法:

去掉collection的<id column="ID" jdbcType="BIGINT" property="id" />后,才能查询出全部数据。

 

相关文章:

  • 2023-03-20
  • 2021-07-03
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-30
猜你喜欢
  • 2021-06-12
  • 2022-01-06
  • 2022-12-23
  • 2022-12-23
  • 2021-08-02
  • 2022-12-23
相关资源
相似解决方案