ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Cause: java.lang.IllegalArgumentException: Sharding value must implements Comparable

2021-09-30 09:59:49  阅读:1266  来源: 互联网

标签:lang implements Comparable java org apache orderGoods ###


在使用sharding jdbc 进行 分库分表时 插入语句 遇到如下错误

错误如下

Caused by: org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.lang.IllegalArgumentException: Sharding value must implements Comparable.
### The error may exist in com/style/note/sharding/mapper/OrderGoodsMapper.java (best guess)
### The error may involve com.style.note.sharding.mapper.OrderGoodsMapper.insert-Inline
### The error occurred while setting parameters
### SQL: insert into t_order_goods(user_id,order_sn,goods_name,price,gmt_create,gmt_update) values(?,?,?,?,?,?)
### Cause: java.lang.IllegalArgumentException: Sharding value must implements Comparable.
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:199)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
	... 50 more
Caused by: java.lang.IllegalArgumentException: Sharding value must implements Comparable.
	at com.google.common.base.Preconditions.checkArgument(Preconditions.java:144)
	at org.apache.shardingsphere.sharding.route.engine.condition.engine.InsertClauseShardingConditionEngine.getRouteValue(InsertClauseShardingConditionEngine.java:112)
	at org.apache.shardingsphere.sharding.route.engine.condition.engine.InsertClauseShardingConditionEngine.createShardingCondition(InsertClauseShardingConditionEngine.java:94)
	at 

代码如图

OrderGoods orderGoods = new OrderGoods();
//orderGoods.setUserId((long) i);
orderGoods.setOrderSn(order.getOrderSn());
orderGoods.setGoodsName("AAA");
orderGoods.setPrice(BigDecimal.valueOf(200));
orderGoods.setGmtCreate(instance.getTime());
orderGoods.setGmtUpdate(instance.getTime());
orderGoodsService.addOrderGoods(orderGoods);

注释的代码后面才补上 之前是没有的
因为order_goods表 根据user_id 进行分库 这个值没有设置就会出错了

总结一下这个错误的原因

  • 被用来分片的键不能为空
  • 可能该键为自生成ID 但这个自生成ID没有生效也就是没有生成成功
  • 其他错误原因引起

标签:lang,implements,Comparable,java,org,apache,orderGoods,###
来源: https://blog.csdn.net/a15835774652/article/details/120560495

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有