使用MybatisPlus报错,Error getting generated key or setting result to parameter object

本文主要是介绍使用MybatisPlus报错,Error getting generated key or setting result to parameter object,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做项目时遇到一个很奇怪的错误,明明数据库设置了主键ID自增,并且实体类上也加了自增的注解
在这里插入图片描述
但是在插入一条数据时却遇到了以下报错。

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.
ExecutorException: Error getting generated key or setting result to parameter object. 
Cause: org.apache.ibatis.executor.result.ResultMapException:Error attempting to get column #1 from result set.  Cause: java.sql.SQLDataException: Value '18,446,744,073,709,549,608' is outside of valid range for type java.lang.Long

错因是因为在默认情况下不设置id会按照数据库自增,但是设置了id就会按照设置的id插入数据库。我将id设置成了负数,在插入数据库时,可能是因为二进制补码之类的规则,虽然执行的sql语句没有将系统生成的自增id真正插入到数据库,但是缺映射到了实体类对象,而这个id超出了Long的范围,所以发生了报错。

以下时实际执行的sql语句:

 Execute SQLINSERT INTO jtcf_planning_report_expenditure ( id, user_id, project_name, use_after_years, every_year_cost, continued_cost_year, order_id, create_by, create_time, update_time, update_by ) VALUES ( -2008, 50, '幸福养老', -5, 0.00600000, 42, 75, 'admin', '2023-03-01T00:29:12.139+0800', '2023-03-01T00:29:12.139+0800', 'admin' )

由于默认情况下又需要自增id的逻辑,而对于特定的业务逻辑需要设置id后插入,故不能将id设置为用户输入的,即:
在这里插入图片描述

最终的解决办法是使用注解编写SQL语句避免上述映射问题,并且能够在特定场景下设置id插入。

    /*** 解决 Error getting generated key or setting result to parameter object值映射回填实体类对象超过Long范围错误* @Options 自定义是否使用生成的主键值*/@Insert("<script>" +"INSERT INTO jtcf_planning_report_expenditure " +"(id,continued_cost_year,every_year_cost,project_name,user_id,order_id,use_after_years) " +"VALUES (#{id},#{continuedCostYear},#{everyYearCost},#{projectName},#{userId},#{orderId},#{useAfterYears}) " +"</script>")@Options(useGeneratedKeys = false,keyProperty = "id",keyColumn = "id")void saveNotUseGeneratedKey(PlanningReportExpenditure p);

这篇关于使用MybatisPlus报错,Error getting generated key or setting result to parameter object的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406129

相关文章

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro