yulichang / mybatis-plus-join

支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供wrapper.leftJoin(),wrapper.rightJoin()等操作
https://yulichang.github.io/mybatis-plus-join-doc/
Apache License 2.0
971 stars 113 forks source link

左连接问题:查询不是主class,会报错 #121

Closed richwxd closed 1 month ago

richwxd commented 1 month ago

当前使用版本(必填,否则不予处理)

1.4.11

该问题是如何引起的?(确定最新版也有问题再提!!!)

原SQL select t3.authority from sys_user_role t1 left join sys_role_menu t2 on t1.role_id = t2.role_id left join sys_menu t3 on t2.menu_id = t3.id where t1.user_id = #{userId} and t1.deleted = 0 and t2.deleted = 0 and t3.deleted = 0 order by t3.sort asc 写法: MPJLambdaWrapper<SysMenuEntity> queryWrapper = new MPJLambdaWrapper<SysMenuEntity>() .select(SysMenuEntity::getAuthority) .select(SysMenuEntity::getAuthority) .leftJoin(SysRoleMenuEntity.class, SysUserRoleEntity::getRoleId, SysRoleMenuEntity::getRoleId) .leftJoin(SysMenuEntity.class, SysRoleMenuEntity::getMenuId, SysMenuEntity::getId) .eq(SysUserRoleEntity::getUserId, userId) .eq(SysRoleMenuEntity::getDeleted, 0) .eq(SysMenuEntity::getDeleted, 0) .orderByAsc(SysMenuEntity::getSort); return selectJoinList(String.class, queryWrapper);

重现步骤(如果有就写完整)

报错信息

报错信息:reason: no instance(s) of type variable(s) exist so that SysRoleMenuEntity conforms to SysUserRoleEntity

richwxd commented 1 month ago

建议修改一下,这样不方便 当前绕过写法: MPJLambdaWrapper<SysMenuEntity> queryWrapper = new MPJLambdaWrapper<SysMenuEntity>() .select(SysMenuEntity::getAuthority) .rightJoin(SysRoleMenuEntity.class, SysRoleMenuEntity::getMenuId, SysMenuEntity::getId) .rightJoin(SysUserRoleEntity.class, SysUserRoleEntity::getRoleId ,SysRoleMenuEntity::getRoleId) .eq(SysUserRoleEntity::getUserId, userId) .eq(SysRoleMenuEntity::getDeleted, 0) .eq(SysMenuEntity::getDeleted, 0) .orderByAsc(SysMenuEntity::getSort); return selectJoinList(String.class, queryWrapper);

yulichang commented 1 month ago

.leftJoin(SysMenuEntity.class, SysRoleMenuEntity::getMenuId, SysMenuEntity::getId) 后面两个参数换个位置