记录mybatis添加表数据时报出的错误:Could not set property ‘id‘ of ‘class com.xxx.Manager with value ‘xx...xx‘
这里写目录标题
- 问题
- 解释问题
- 分析问题
- 解决问题
问题
服务端orm的框架使用的是mybatis ,当insert管理员时,出现如下错误:
org.apache.ibatis.reflection.ReflectionException: Could not set property 'id' of 'class com.xxx.Manager' with value '1407257724219068417' Cause: java.lang.IllegalArgumentException: java.lang.ClassCastException@78c9c0fb
解释问题
上述问题解释成中文就是:无法将值1407257724219068417设置为类com.xxx.Manager的id属性值,是因为该值是非法参数。
什么情况会出现非法参数,可以举出如下的例子说明:
public class ClassLoaderCheck {public static void main(String[] args) {//毫秒时间戳格式String timeStamp = "1658635894000";//要转成后的时间格式SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间戳转换成时间System.out.println(sdf.format(new Date(timeStampLong)));}
}
可以看其输出结果为:
我们将上面毫秒字符串时间戳转为整型时间戳,如下所示:
public static void main(String[] args) {//毫秒时间戳格式String timeStamp = "1658635894000";//parse成长整型long timeStampLong = Long.parseLong(timeStamp);//要转成后的时间格式SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间戳转换成时间System.out.println(sdf.format(new Date(timeStampLong)));}
再次输出,如图所示:
由此可以看出,报出java.lang.IllegalArgumentException
这个问题,一般情况下,就是输入的参数不符合方法的解析规则。
所以,我们可以沿着这条路,继续分析Could not set property 'id' of 'class com.xxx.Manager' with value '1407257724219068417'
这个问题。
分析问题
于是去排查managerMapper.xml
文件的insert语句
<insert id="insert" parameterType="com.xxx.Manager"><selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">SELECT LAST_INSERT_ID() AS id</selectKey>insert into manager (name, xxx, updateTime)values (#{name,jdbcType=VARCHAR},xxx, #{updateTime,jdbcType=TIMESTAMP})</insert>
由于是通过selectKey
生成主键id的数值,此时,mybatis会在主键上生成其默认的uuid的值,比如上面的1407257724219068417
,而manager的主键为int的类型且最大长度为11,如图所示:
解决问题
UUID的字符长度超出了id的字符长度,所以,报出了上面的的错误,只要在主键id上注明TableId即可,如下所示:
@TableId(type = IdType.AUTO)private Integer id;
当然IdType还有其他类型,我们来看看IdType的类型
值 | 描述 |
---|---|
Auto | 数据库自增 |
Input | 自行输入 |
ID_Worker | 分布式全局唯一ID 长整型类型 |
UUID | 32位UUID字符串 |
NONE | 无状态 |
ID_WORKER_STR | 分布式全局唯一ID 字符串类型 |
日拱一卒,功不唐捐
记录mybatis添加表数据时报出的错误:Could not set property ‘id‘ of ‘class com.xxx.Manager with value ‘xx...xx‘相关推荐
- mfc中在vector里添加控件类型的数据时出现C2248错误
@mfc中在vector里添加控件类型的数据时出现C2248错误 这是我在.h文件中定义的2个容器 public:vector<CComboBox*> cbx;vector <CSt ...
- 检查已终止。收集事实数据时检测到错误
检查已终止.收集事实数据时检测到错误 数据类型 SQL2005 数据容量 470 MB 故障类型 服务器断电导致数据库系统表异常.消息 8921,级别 16,状态 1,第 1 行 检查已终止.收集事实 ...
- android获取错误原因,从http读取数据时发生OutOfMemory错误获取请求android
我正在做一个http获取请求.我需要接收大量数据,但在读取数据时出现OutOfMemory异常.从http读取数据时发生OutOfMemory错误获取请求android 我的代码: public st ...
- mysql 1455_关于Oracle 11g导出数据时 报 ORA-1455错误的处理
关于Oracle 11g导出数据时 报 ORA-1455错误的处理,由于导出的该用户的表可能存在空数据表,那么可能就会出现此其异常. 关于Oracle 11g导出数据时 报 ORA-1455错误的处理 ...
- android studio编程时出现的错误:Cannot get property 'XXXX' on extra properties extension as it does not exis
android studio编程时出现的错误:Cannot get property 'XXXX' on extra properties extension as it does not exist ...
- 有外键约束的子表插入数据时出现的错误
mysql-外键 父表:t_grade 子表:t_student 当在字表中插入数据时,必须有与其对应的父表记录,若父表中无对应的相关记录,则子表的数据插入失败 转载于:https://blog.51 ...
- Mybatis + Mysql 插入数据时中文乱码问题
今天碰到一个mybatis向mysql中插入数据时,中文显示为'???'的问题,拿出来说下. 对于数据库操作中出现的中文乱码,一般有两种情况: 数据库本身设置 连接数据库时,jdbc的编码设置 对于第 ...
- 删除SQL表数据时存在约束的解决方法
这几天在做项目时,清除库中的数据,但是各表之间都存在约束关系,无法使用 ' truncate table 表名 '语句进行操作,通过查询资料,找到了解决方法,当表之间存在约束关联时,想要执行trunc ...
- 批量插入数据表数据时,主键冲突的解决
2.使用普通的insert into on conflict合并写入,存在写入放大思路: 大量数据,批量插入到数据表中时,很容易造成主键冲突,重复数据有唯一约束插入不进去表中,报错的问题出现. 排查错 ...
最新文章
- 8、Python与设计模式--门面模式
- 山东省各2021高考成绩查询,关于2021年山东省高考成绩查询系统入口【官网】
- html放缩都让内容处于正中间
- C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
- python发邮件和网络的简单使用
- 2016年3月-7月电机组装以及基于MAXON运动控制系统
- win7系统mysql连接不上数据库吗_Win7系统使用数据库时mysql频繁掉线无法连接的两种解决方法...
- Openfiler---开源存储管理平台
- “对不起,我们只招有出色背景的技术人员!”
- android 渐变展示启动屏
- Linux开放端口、关闭防火墙操作
- 4 读写文件_WEB安全之SQL注入(4)——读写文件
- Linux系统kill端口占用简书,MAC/Linux解决端口占用
- 简单了解TransE
- 战地一自定义服务器怎么搜索,战地1怎么快速加入服务器?多种加入方法一览...
- BTC投资者损失预计达73亿美元 “割肉式”抛售来袭?加密寒冬比预期更冷、更长
- 2021-07-04——在线考试系统设计
- win7如何隐藏所有微软服务器,如何隐藏Win7登录界面的administrator用户名
- python 爬虫http2
- 1.口袋西游人物属性(01)