最新消息:

ShardingSphere update函数报ShardingException: Can not update sharding key的问题

ShardingSphere niuge678 2499浏览 0评论

被这个错误耽误了2个小时,有必要记录一下。

错误信息

最近使用 Mybatis-Plus+ShardingShpere 操作数据库,遇到一个不能update的问题,异常信息是:ShardingException: Can not update sharding key。我在网上搜了一下,遇到这个错误的人还不少,于是想当然的认为,这可能是ShardingShpere框架的问题(可能是一个bug)。

代码如下(十分简单的一个更新函数):

  @Override
  public boolean update(Order order) {
    UpdateWrapper<OrderDO> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("order_id", order.getOrderId());
    order.setUpdateTime(new Date());
    return super.update(CONVERTER.convertToDO(order), updateWrapper);
  }

解决方案

  @Override
  public boolean update(Order order) {
    UpdateWrapper<OrderDO> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("order_id", order.getOrderId());
    order.setOrderId(null);
    order.setMaskId(null);
    order.setUpdateTime(new Date());
    return super.update(CONVERTER.convertToDO(order), updateWrapper);
  }

其实解决方法十分简单,只需要把orderId和maskId都设置为null即可。

由于我们在shardingsphere-config.yaml对order表配置了2个shardingkey,如果只把orderId设置为null,还是会报错。需要把2个shardingkey同时设置为null。

经验教训

1、不要想当然以为框架不工作,这么简单的函数,一般框架是没问题的;
2、找人询问一下,打开思路,这次就是feiyang过来帮忙瞅了一眼,迅速解决了问题。

转载请注明:牛哥678 » ShardingSphere update函数报ShardingException: Can not update sharding key的问题

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址