请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

部门更新问题

部门更新bug,如下代码:

public void update(DeptParam param) {
        BeanValidator.check(param);
        if(checkExist(param.getParentId(), param.getName(), param.getId())) {
            throw new ParamException("同一层级下存在相同名称的部门");
        }
        SysDept before = sysDeptMapper.selectByPrimaryKey(param.getId());
        Preconditions.checkNotNull(before, "待更新的部门不存在");
        if(checkExist(param.getParentId(), param.getName(), param.getId())) {
            throw new ParamException("同一层级下存在相同名称的部门");
        }
 
        SysDept after = SysDept.builder().id(param.getId()).name(param.getName()).parentId(param.getParentId())
                .seq(param.getSeq()).remark(param.getRemark()).build();
        after.setLevel(LevelUtil.calculateLevel(getLevel(param.getParentId()), param.getParentId()));
        after.setOperator(RequestHolder.getCurrentUser().getUsername());
        after.setOperateIp(IpUtil.getRemoteIp(RequestHolder.getCurrentRequest()));
        after.setOperateTime(new Date());
 
        updateWithChild(before, after);
    }
private boolean checkExist(Integer parentId, String deptName, Integer deptId) {
        return sysDeptMapper.countByNameAndParentId(parentId, deptName, deptId) > 0;
    }

老师,我认为您的代码存在bug,当部门名称和parentId都不变的时候,在执行到checkExist时,返回肯定为真,这样就会抛出“同一层级下存在相同名称的部门”异常。



正在回答

4回答

你看一下传入到checkExist方法里的deptId是否有问题,这个在更新时sql里会排除当前部门。你看看这个是bug还是你传入的有问题、或者理解的课程里的不一致?

0 回复 有任何疑惑可以回复我~
  • 提问者 zhouyayong #1
    非常感谢!我找到 原因了,非常抱歉!耽误您时间了。还是自己的代码有问题!
    回复 有任何疑惑可以回复我~ 2018-04-04 15:27:07
  • 嗯 , 我也是遇到了相同的问题 , 原因是sql.xml里id!=null这里 , 缺少了叹号 , 写的时候没注意 , 写错了
    回复 有任何疑惑可以回复我~ 2019-02-26 16:11:01
提问者 zhouyayong 2018-04-04 15:28:16

我在sql中没有排除当前部门。

0 回复 有任何疑惑可以回复我~
Jimin 2018-04-04 15:23:00

那就不会有问题啊,sql里会排除当前部门去同一层级校验是否存在同名的部门。有什么问题吗?

0 回复 有任何疑惑可以回复我~
提问者 zhouyayong 2018-04-04 15:21:31

我传入的deptId是当前部门的Id,难道您出入的不是当前部门的Id

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信