使用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 SQL:INSERT 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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_45817496/article/details/129272976
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/406129

相关文章

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

Java Lambda表达式的使用详解

《JavaLambda表达式的使用详解》:本文主要介绍JavaLambda表达式的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言二、Lambda表达式概述1. 什么是Lambda表达式?三、Lambda表达式的语法规则1. 无参数的Lambda表

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Spring @RequestMapping 注解及使用技巧详解

《Spring@RequestMapping注解及使用技巧详解》@RequestMapping是SpringMVC中定义请求映射规则的核心注解,用于将HTTP请求映射到Controller处理方法... 目录一、核心作用二、关键参数说明三、快捷组合注解四、动态路径参数(@PathVariable)五、匹配请

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接